1; RUN: llc -march=hexagon < %s | FileCheck %s 2 3; minb 4 5; CHECK: test_00: 6; CHECK: v0.b = vmin(v0.b,v1.b) 7define <128 x i8> @test_00(<128 x i8> %v0, <128 x i8> %v1) #0 { 8 %t0 = icmp slt <128 x i8> %v0, %v1 9 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1 10 ret <128 x i8> %t1 11} 12 13; CHECK: test_01: 14; CHECK: v0.b = vmin(v0.b,v1.b) 15define <128 x i8> @test_01(<128 x i8> %v0, <128 x i8> %v1) #0 { 16 %t0 = icmp sle <128 x i8> %v0, %v1 17 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1 18 ret <128 x i8> %t1 19} 20 21; CHECK: test_02: 22; CHECK: v0.b = vmin(v0.b,v1.b) 23define <128 x i8> @test_02(<128 x i8> %v0, <128 x i8> %v1) #0 { 24 %t0 = icmp sgt <128 x i8> %v0, %v1 25 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0 26 ret <128 x i8> %t1 27} 28 29; CHECK: test_03: 30; CHECK: v0.b = vmin(v0.b,v1.b) 31define <128 x i8> @test_03(<128 x i8> %v0, <128 x i8> %v1) #0 { 32 %t0 = icmp sge <128 x i8> %v0, %v1 33 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0 34 ret <128 x i8> %t1 35} 36 37; maxb 38 39; CHECK: test_04: 40; CHECK: v0.b = vmax(v0.b,v1.b) 41define <128 x i8> @test_04(<128 x i8> %v0, <128 x i8> %v1) #0 { 42 %t0 = icmp slt <128 x i8> %v0, %v1 43 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0 44 ret <128 x i8> %t1 45} 46 47; CHECK: test_05: 48; CHECK: v0.b = vmax(v0.b,v1.b) 49define <128 x i8> @test_05(<128 x i8> %v0, <128 x i8> %v1) #0 { 50 %t0 = icmp sle <128 x i8> %v0, %v1 51 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0 52 ret <128 x i8> %t1 53} 54 55; CHECK: test_06: 56; CHECK: v0.b = vmax(v0.b,v1.b) 57define <128 x i8> @test_06(<128 x i8> %v0, <128 x i8> %v1) #0 { 58 %t0 = icmp sgt <128 x i8> %v0, %v1 59 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1 60 ret <128 x i8> %t1 61} 62 63; CHECK: test_07: 64; CHECK: v0.b = vmax(v0.b,v1.b) 65define <128 x i8> @test_07(<128 x i8> %v0, <128 x i8> %v1) #0 { 66 %t0 = icmp sge <128 x i8> %v0, %v1 67 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1 68 ret <128 x i8> %t1 69} 70 71; minub 72 73; CHECK: test_08: 74; CHECK: v0.ub = vmin(v0.ub,v1.ub) 75define <128 x i8> @test_08(<128 x i8> %v0, <128 x i8> %v1) #0 { 76 %t0 = icmp ult <128 x i8> %v0, %v1 77 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1 78 ret <128 x i8> %t1 79} 80 81; CHECK: test_09: 82; CHECK: v0.ub = vmin(v0.ub,v1.ub) 83define <128 x i8> @test_09(<128 x i8> %v0, <128 x i8> %v1) #0 { 84 %t0 = icmp ule <128 x i8> %v0, %v1 85 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1 86 ret <128 x i8> %t1 87} 88 89; CHECK: test_0a: 90; CHECK: v0.ub = vmin(v0.ub,v1.ub) 91define <128 x i8> @test_0a(<128 x i8> %v0, <128 x i8> %v1) #0 { 92 %t0 = icmp ugt <128 x i8> %v0, %v1 93 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0 94 ret <128 x i8> %t1 95} 96 97; CHECK: test_0b: 98; CHECK: v0.ub = vmin(v0.ub,v1.ub) 99define <128 x i8> @test_0b(<128 x i8> %v0, <128 x i8> %v1) #0 { 100 %t0 = icmp uge <128 x i8> %v0, %v1 101 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0 102 ret <128 x i8> %t1 103} 104 105; maxub 106 107; CHECK: test_0c: 108; CHECK: v0.ub = vmax(v0.ub,v1.ub) 109define <128 x i8> @test_0c(<128 x i8> %v0, <128 x i8> %v1) #0 { 110 %t0 = icmp ult <128 x i8> %v0, %v1 111 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0 112 ret <128 x i8> %t1 113} 114 115; CHECK: test_0d: 116; CHECK: v0.ub = vmax(v0.ub,v1.ub) 117define <128 x i8> @test_0d(<128 x i8> %v0, <128 x i8> %v1) #0 { 118 %t0 = icmp ule <128 x i8> %v0, %v1 119 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0 120 ret <128 x i8> %t1 121} 122 123; CHECK: test_0e: 124; CHECK: v0.ub = vmax(v0.ub,v1.ub) 125define <128 x i8> @test_0e(<128 x i8> %v0, <128 x i8> %v1) #0 { 126 %t0 = icmp ugt <128 x i8> %v0, %v1 127 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1 128 ret <128 x i8> %t1 129} 130 131; CHECK: test_0f: 132; CHECK: v0.ub = vmax(v0.ub,v1.ub) 133define <128 x i8> @test_0f(<128 x i8> %v0, <128 x i8> %v1) #0 { 134 %t0 = icmp uge <128 x i8> %v0, %v1 135 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1 136 ret <128 x i8> %t1 137} 138 139; minh 140 141; CHECK: test_10: 142; CHECK: v0.h = vmin(v0.h,v1.h) 143define <64 x i16> @test_10(<64 x i16> %v0, <64 x i16> %v1) #0 { 144 %t0 = icmp slt <64 x i16> %v0, %v1 145 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1 146 ret <64 x i16> %t1 147} 148 149; CHECK: test_11: 150; CHECK: v0.h = vmin(v0.h,v1.h) 151define <64 x i16> @test_11(<64 x i16> %v0, <64 x i16> %v1) #0 { 152 %t0 = icmp sle <64 x i16> %v0, %v1 153 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1 154 ret <64 x i16> %t1 155} 156 157; CHECK: test_12: 158; CHECK: v0.h = vmin(v0.h,v1.h) 159define <64 x i16> @test_12(<64 x i16> %v0, <64 x i16> %v1) #0 { 160 %t0 = icmp sgt <64 x i16> %v0, %v1 161 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0 162 ret <64 x i16> %t1 163} 164 165; CHECK: test_13: 166; CHECK: v0.h = vmin(v0.h,v1.h) 167define <64 x i16> @test_13(<64 x i16> %v0, <64 x i16> %v1) #0 { 168 %t0 = icmp sge <64 x i16> %v0, %v1 169 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0 170 ret <64 x i16> %t1 171} 172 173; maxh 174 175; CHECK: test_14: 176; CHECK: v0.h = vmax(v0.h,v1.h) 177define <64 x i16> @test_14(<64 x i16> %v0, <64 x i16> %v1) #0 { 178 %t0 = icmp slt <64 x i16> %v0, %v1 179 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0 180 ret <64 x i16> %t1 181} 182 183; CHECK: test_15: 184; CHECK: v0.h = vmax(v0.h,v1.h) 185define <64 x i16> @test_15(<64 x i16> %v0, <64 x i16> %v1) #0 { 186 %t0 = icmp sle <64 x i16> %v0, %v1 187 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0 188 ret <64 x i16> %t1 189} 190 191; CHECK: test_16: 192; CHECK: v0.h = vmax(v0.h,v1.h) 193define <64 x i16> @test_16(<64 x i16> %v0, <64 x i16> %v1) #0 { 194 %t0 = icmp sgt <64 x i16> %v0, %v1 195 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1 196 ret <64 x i16> %t1 197} 198 199; CHECK: test_17: 200; CHECK: v0.h = vmax(v0.h,v1.h) 201define <64 x i16> @test_17(<64 x i16> %v0, <64 x i16> %v1) #0 { 202 %t0 = icmp sge <64 x i16> %v0, %v1 203 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1 204 ret <64 x i16> %t1 205} 206 207; minuh 208 209; CHECK: test_18: 210; CHECK: v0.uh = vmin(v0.uh,v1.uh) 211define <64 x i16> @test_18(<64 x i16> %v0, <64 x i16> %v1) #0 { 212 %t0 = icmp ult <64 x i16> %v0, %v1 213 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1 214 ret <64 x i16> %t1 215} 216 217; CHECK: test_19: 218; CHECK: v0.uh = vmin(v0.uh,v1.uh) 219define <64 x i16> @test_19(<64 x i16> %v0, <64 x i16> %v1) #0 { 220 %t0 = icmp ule <64 x i16> %v0, %v1 221 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1 222 ret <64 x i16> %t1 223} 224 225; CHECK: test_1a: 226; CHECK: v0.uh = vmin(v0.uh,v1.uh) 227define <64 x i16> @test_1a(<64 x i16> %v0, <64 x i16> %v1) #0 { 228 %t0 = icmp ugt <64 x i16> %v0, %v1 229 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0 230 ret <64 x i16> %t1 231} 232 233; CHECK: test_1b: 234; CHECK: v0.uh = vmin(v0.uh,v1.uh) 235define <64 x i16> @test_1b(<64 x i16> %v0, <64 x i16> %v1) #0 { 236 %t0 = icmp uge <64 x i16> %v0, %v1 237 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0 238 ret <64 x i16> %t1 239} 240 241; maxuh 242 243; CHECK: test_1c: 244; CHECK: v0.uh = vmax(v0.uh,v1.uh) 245define <64 x i16> @test_1c(<64 x i16> %v0, <64 x i16> %v1) #0 { 246 %t0 = icmp ult <64 x i16> %v0, %v1 247 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0 248 ret <64 x i16> %t1 249} 250 251; CHECK: test_1d: 252; CHECK: v0.uh = vmax(v0.uh,v1.uh) 253define <64 x i16> @test_1d(<64 x i16> %v0, <64 x i16> %v1) #0 { 254 %t0 = icmp ule <64 x i16> %v0, %v1 255 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0 256 ret <64 x i16> %t1 257} 258 259; CHECK: test_1e: 260; CHECK: v0.uh = vmax(v0.uh,v1.uh) 261define <64 x i16> @test_1e(<64 x i16> %v0, <64 x i16> %v1) #0 { 262 %t0 = icmp ugt <64 x i16> %v0, %v1 263 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1 264 ret <64 x i16> %t1 265} 266 267; CHECK: test_1f: 268; CHECK: v0.uh = vmax(v0.uh,v1.uh) 269define <64 x i16> @test_1f(<64 x i16> %v0, <64 x i16> %v1) #0 { 270 %t0 = icmp uge <64 x i16> %v0, %v1 271 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1 272 ret <64 x i16> %t1 273} 274 275; minw 276 277; CHECK: test_20: 278; CHECK: v0.w = vmin(v0.w,v1.w) 279define <32 x i32> @test_20(<32 x i32> %v0, <32 x i32> %v1) #0 { 280 %t0 = icmp slt <32 x i32> %v0, %v1 281 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1 282 ret <32 x i32> %t1 283} 284 285; CHECK: test_21: 286; CHECK: v0.w = vmin(v0.w,v1.w) 287define <32 x i32> @test_21(<32 x i32> %v0, <32 x i32> %v1) #0 { 288 %t0 = icmp sle <32 x i32> %v0, %v1 289 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1 290 ret <32 x i32> %t1 291} 292 293; CHECK: test_22: 294; CHECK: v0.w = vmin(v0.w,v1.w) 295define <32 x i32> @test_22(<32 x i32> %v0, <32 x i32> %v1) #0 { 296 %t0 = icmp sgt <32 x i32> %v0, %v1 297 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v0 298 ret <32 x i32> %t1 299} 300 301; CHECK: test_23: 302; CHECK: v0.w = vmin(v0.w,v1.w) 303define <32 x i32> @test_23(<32 x i32> %v0, <32 x i32> %v1) #0 { 304 %t0 = icmp sge <32 x i32> %v0, %v1 305 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v0 306 ret <32 x i32> %t1 307} 308 309; maxw 310 311; CHECK: test_24: 312; CHECK: v0.w = vmax(v0.w,v1.w) 313define <32 x i32> @test_24(<32 x i32> %v0, <32 x i32> %v1) #0 { 314 %t0 = icmp slt <32 x i32> %v0, %v1 315 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v0 316 ret <32 x i32> %t1 317} 318 319; CHECK: test_25: 320; CHECK: v0.w = vmax(v0.w,v1.w) 321define <32 x i32> @test_25(<32 x i32> %v0, <32 x i32> %v1) #0 { 322 %t0 = icmp sle <32 x i32> %v0, %v1 323 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v0 324 ret <32 x i32> %t1 325} 326 327; CHECK: test_26: 328; CHECK: v0.w = vmax(v0.w,v1.w) 329define <32 x i32> @test_26(<32 x i32> %v0, <32 x i32> %v1) #0 { 330 %t0 = icmp sgt <32 x i32> %v0, %v1 331 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1 332 ret <32 x i32> %t1 333} 334 335; CHECK: test_27: 336; CHECK: v0.w = vmax(v0.w,v1.w) 337define <32 x i32> @test_27(<32 x i32> %v0, <32 x i32> %v1) #0 { 338 %t0 = icmp sge <32 x i32> %v0, %v1 339 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1 340 ret <32 x i32> %t1 341} 342 343attributes #0 = { readnone nounwind "target-cpu"="hexagonv62" "target-features"="+hvx,+hvx-length128b" } 344 345