1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2; RUN: llc -mtriple=hexagon < %s | FileCheck %s 3 4define void @f0(ptr %a0, ptr %a1, ptr %a2, ptr %a3) { 5; CHECK-LABEL: f0: 6; CHECK: .cfi_startproc 7; CHECK-NEXT: // %bb.0: // %b0 8; CHECK-NEXT: { 9; CHECK-NEXT: r0 = memub(r0+#0) 10; CHECK-NEXT: } 11; CHECK-NEXT: { 12; CHECK-NEXT: p0 = r0 13; CHECK-NEXT: } 14; CHECK-NEXT: { 15; CHECK-NEXT: r0 = mux(p0,r1,r2) 16; CHECK-NEXT: } 17; CHECK-NEXT: { 18; CHECK-NEXT: r0 = memub(r0+#0) 19; CHECK-NEXT: } 20; CHECK-NEXT: { 21; CHECK-NEXT: p0 = r0 22; CHECK-NEXT: } 23; CHECK-NEXT: { 24; CHECK-NEXT: r0 = mux(p0,#1,#0) 25; CHECK-NEXT: jumpr r31 26; CHECK-NEXT: memb(r3+#0) = r0.new 27; CHECK-NEXT: } 28b0: 29 %v0 = load i1, ptr %a0 30 %v1 = load i1, ptr %a1 31 %v2 = load i1, ptr %a2 32 %v3 = select i1 %v0, i1 %v1, i1 %v2 33 store i1 %v3, ptr %a3 34 ret void 35} 36 37define void @f1(ptr %a0, ptr %a1, ptr %a2, ptr %a3) { 38; CHECK-LABEL: f1: 39; CHECK: .cfi_startproc 40; CHECK-NEXT: // %bb.0: // %b0 41; CHECK-NEXT: { 42; CHECK-NEXT: r0 = memub(r0+#0) 43; CHECK-NEXT: } 44; CHECK-NEXT: { 45; CHECK-NEXT: p0 = r0 46; CHECK-NEXT: } 47; CHECK-NEXT: { 48; CHECK-NEXT: r0 = mux(p0,r1,r2) 49; CHECK-NEXT: } 50; CHECK-NEXT: { 51; CHECK-NEXT: jumpr r31 52; CHECK-NEXT: r0 = memub(r0+#0) 53; CHECK-NEXT: memb(r3+#0) = r0.new 54; CHECK-NEXT: } 55b0: 56 %v0 = load i1, ptr %a0 57 %v1 = load <2 x i1>, ptr %a1 58 %v2 = load <2 x i1>, ptr %a2 59 %v3 = select i1 %v0, <2 x i1> %v1, <2 x i1> %v2 60 store <2 x i1> %v3, ptr %a3 61 ret void 62} 63 64define void @f2(ptr %a0, ptr %a1, ptr %a2, ptr %a3) { 65; CHECK-LABEL: f2: 66; CHECK: .cfi_startproc 67; CHECK-NEXT: // %bb.0: // %b0 68; CHECK-NEXT: { 69; CHECK-NEXT: r0 = memub(r0+#0) 70; CHECK-NEXT: } 71; CHECK-NEXT: { 72; CHECK-NEXT: p0 = r0 73; CHECK-NEXT: } 74; CHECK-NEXT: { 75; CHECK-NEXT: r0 = mux(p0,r1,r2) 76; CHECK-NEXT: } 77; CHECK-NEXT: { 78; CHECK-NEXT: jumpr r31 79; CHECK-NEXT: r0 = memub(r0+#0) 80; CHECK-NEXT: memb(r3+#0) = r0.new 81; CHECK-NEXT: } 82b0: 83 %v0 = load i1, ptr %a0 84 %v1 = load <4 x i1>, ptr %a1 85 %v2 = load <4 x i1>, ptr %a2 86 %v3 = select i1 %v0, <4 x i1> %v1, <4 x i1> %v2 87 store <4 x i1> %v3, ptr %a3 88 ret void 89} 90 91define void @f3(ptr %a0, ptr %a1, ptr %a2, ptr %a3) { 92; CHECK-LABEL: f3: 93; CHECK: .cfi_startproc 94; CHECK-NEXT: // %bb.0: // %b0 95; CHECK-NEXT: { 96; CHECK-NEXT: r0 = memub(r0+#0) 97; CHECK-NEXT: } 98; CHECK-NEXT: { 99; CHECK-NEXT: p0 = r0 100; CHECK-NEXT: } 101; CHECK-NEXT: { 102; CHECK-NEXT: r0 = mux(p0,r1,r2) 103; CHECK-NEXT: } 104; CHECK-NEXT: { 105; CHECK-NEXT: jumpr r31 106; CHECK-NEXT: r0 = memub(r0+#0) 107; CHECK-NEXT: memb(r3+#0) = r0.new 108; CHECK-NEXT: } 109b0: 110 %v0 = load i1, ptr %a0 111 %v1 = load <8 x i1>, ptr %a1 112 %v2 = load <8 x i1>, ptr %a2 113 %v3 = select i1 %v0, <8 x i1> %v1, <8 x i1> %v2 114 store <8 x i1> %v3, ptr %a3 115 ret void 116} 117 118define void @f4(ptr %a0, ptr %a1, ptr %a2, ptr %a3) { 119; CHECK-LABEL: f4: 120; CHECK: .cfi_startproc 121; CHECK-NEXT: // %bb.0: // %b0 122; CHECK-NEXT: { 123; CHECK-NEXT: r1 = memub(r1+#0) 124; CHECK-NEXT: r0 = memub(r0+#0) 125; CHECK-NEXT: } 126; CHECK-NEXT: { 127; CHECK-NEXT: r2 = memub(r2+#0) 128; CHECK-NEXT: } 129; CHECK-NEXT: { 130; CHECK-NEXT: p0 = r0 131; CHECK-NEXT: p1 = r1 132; CHECK-NEXT: } 133; CHECK-NEXT: { 134; CHECK-NEXT: p2 = r2 135; CHECK-NEXT: p1 = and(p1,p0) 136; CHECK-NEXT: } 137; CHECK-NEXT: { 138; CHECK-NEXT: p0 = or(p1,and(p2,!p0)) 139; CHECK-NEXT: } 140; CHECK-NEXT: { 141; CHECK-NEXT: r2 = p0 142; CHECK-NEXT: jumpr r31 143; CHECK-NEXT: memb(r3+#0) = r2.new 144; CHECK-NEXT: } 145b0: 146 %v0 = load <2 x i1>, ptr %a0 147 %v1 = load <2 x i1>, ptr %a1 148 %v2 = load <2 x i1>, ptr %a2 149 %v3 = select <2 x i1> %v0, <2 x i1> %v1, <2 x i1> %v2 150 store <2 x i1> %v3, ptr %a3 151 ret void 152} 153 154define void @f5(ptr %a0, ptr %a1, ptr %a2, ptr %a3) { 155; CHECK-LABEL: f5: 156; CHECK: .cfi_startproc 157; CHECK-NEXT: // %bb.0: // %b0 158; CHECK-NEXT: { 159; CHECK-NEXT: r1 = memub(r1+#0) 160; CHECK-NEXT: r0 = memub(r0+#0) 161; CHECK-NEXT: } 162; CHECK-NEXT: { 163; CHECK-NEXT: r2 = memub(r2+#0) 164; CHECK-NEXT: } 165; CHECK-NEXT: { 166; CHECK-NEXT: p0 = r0 167; CHECK-NEXT: p1 = r1 168; CHECK-NEXT: } 169; CHECK-NEXT: { 170; CHECK-NEXT: p2 = r2 171; CHECK-NEXT: p1 = and(p1,p0) 172; CHECK-NEXT: } 173; CHECK-NEXT: { 174; CHECK-NEXT: p0 = or(p1,and(p2,!p0)) 175; CHECK-NEXT: } 176; CHECK-NEXT: { 177; CHECK-NEXT: r2 = p0 178; CHECK-NEXT: jumpr r31 179; CHECK-NEXT: memb(r3+#0) = r2.new 180; CHECK-NEXT: } 181b0: 182 %v0 = load <4 x i1>, ptr %a0 183 %v1 = load <4 x i1>, ptr %a1 184 %v2 = load <4 x i1>, ptr %a2 185 %v3 = select <4 x i1> %v0, <4 x i1> %v1, <4 x i1> %v2 186 store <4 x i1> %v3, ptr %a3 187 ret void 188} 189 190define void @f6(ptr %a0, ptr %a1, ptr %a2, ptr %a3) { 191; CHECK-LABEL: f6: 192; CHECK: .cfi_startproc 193; CHECK-NEXT: // %bb.0: // %b0 194; CHECK-NEXT: { 195; CHECK-NEXT: r1 = memub(r1+#0) 196; CHECK-NEXT: r0 = memub(r0+#0) 197; CHECK-NEXT: } 198; CHECK-NEXT: { 199; CHECK-NEXT: r2 = memub(r2+#0) 200; CHECK-NEXT: } 201; CHECK-NEXT: { 202; CHECK-NEXT: p0 = r0 203; CHECK-NEXT: p1 = r1 204; CHECK-NEXT: } 205; CHECK-NEXT: { 206; CHECK-NEXT: p2 = r2 207; CHECK-NEXT: p1 = and(p1,p0) 208; CHECK-NEXT: } 209; CHECK-NEXT: { 210; CHECK-NEXT: p0 = or(p1,and(p2,!p0)) 211; CHECK-NEXT: } 212; CHECK-NEXT: { 213; CHECK-NEXT: r2 = p0 214; CHECK-NEXT: jumpr r31 215; CHECK-NEXT: memb(r3+#0) = r2.new 216; CHECK-NEXT: } 217b0: 218 %v0 = load <8 x i1>, ptr %a0 219 %v1 = load <8 x i1>, ptr %a1 220 %v2 = load <8 x i1>, ptr %a2 221 %v3 = select <8 x i1> %v0, <8 x i1> %v1, <8 x i1> %v2 222 store <8 x i1> %v3, ptr %a3 223 ret void 224} 225