384 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s3 4; shift left5 6define i32 @and_signbit_select_shl(i32 %x, i1 %cond, ptr %dst) {7; CHECK-LABEL: and_signbit_select_shl:8; CHECK: // %bb.0:9; CHECK-NEXT: and w8, w0, #0xff000010; CHECK-NEXT: tst w1, #0x111; CHECK-NEXT: csel w8, w8, w0, ne12; CHECK-NEXT: lsl w0, w8, #813; CHECK-NEXT: str w0, [x2]14; CHECK-NEXT: ret15 %t0 = and i32 %x, 4294901760 ; 0xFFFF000016 %t1 = select i1 %cond, i32 %t0, i32 %x17 %r = shl i32 %t1, 818 store i32 %r, ptr %dst19 ret i32 %r20}21define i32 @and_nosignbit_select_shl(i32 %x, i1 %cond, ptr %dst) {22; CHECK-LABEL: and_nosignbit_select_shl:23; CHECK: // %bb.0:24; CHECK-NEXT: and w8, w0, #0xff000025; CHECK-NEXT: tst w1, #0x126; CHECK-NEXT: csel w8, w8, w0, ne27; CHECK-NEXT: lsl w0, w8, #828; CHECK-NEXT: str w0, [x2]29; CHECK-NEXT: ret30 %t0 = and i32 %x, 2147418112 ; 0x7FFF000031 %t1 = select i1 %cond, i32 %t0, i32 %x32 %r = shl i32 %t1, 833 store i32 %r, ptr %dst34 ret i32 %r35}36 37define i32 @or_signbit_select_shl(i32 %x, i1 %cond, ptr %dst) {38; CHECK-LABEL: or_signbit_select_shl:39; CHECK: // %bb.0:40; CHECK-NEXT: orr w8, w0, #0xff000041; CHECK-NEXT: tst w1, #0x142; CHECK-NEXT: csel w8, w8, w0, ne43; CHECK-NEXT: lsl w0, w8, #844; CHECK-NEXT: str w0, [x2]45; CHECK-NEXT: ret46 %t0 = or i32 %x, 4294901760 ; 0xFFFF000047 %t1 = select i1 %cond, i32 %t0, i32 %x48 %r = shl i32 %t1, 849 store i32 %r, ptr %dst50 ret i32 %r51}52define i32 @or_nosignbit_select_shl(i32 %x, i1 %cond, ptr %dst) {53; CHECK-LABEL: or_nosignbit_select_shl:54; CHECK: // %bb.0:55; CHECK-NEXT: orr w8, w0, #0xff000056; CHECK-NEXT: tst w1, #0x157; CHECK-NEXT: csel w8, w8, w0, ne58; CHECK-NEXT: lsl w0, w8, #859; CHECK-NEXT: str w0, [x2]60; CHECK-NEXT: ret61 %t0 = or i32 %x, 2147418112 ; 0x7FFF000062 %t1 = select i1 %cond, i32 %t0, i32 %x63 %r = shl i32 %t1, 864 store i32 %r, ptr %dst65 ret i32 %r66}67 68define i32 @xor_signbit_select_shl(i32 %x, i1 %cond, ptr %dst) {69; CHECK-LABEL: xor_signbit_select_shl:70; CHECK: // %bb.0:71; CHECK-NEXT: eor w8, w0, #0xff000072; CHECK-NEXT: tst w1, #0x173; CHECK-NEXT: csel w8, w8, w0, ne74; CHECK-NEXT: lsl w0, w8, #875; CHECK-NEXT: str w0, [x2]76; CHECK-NEXT: ret77 %t0 = xor i32 %x, 4294901760 ; 0xFFFF000078 %t1 = select i1 %cond, i32 %t0, i32 %x79 %r = shl i32 %t1, 880 store i32 %r, ptr %dst81 ret i32 %r82}83define i32 @xor_nosignbit_select_shl(i32 %x, i1 %cond, ptr %dst) {84; CHECK-LABEL: xor_nosignbit_select_shl:85; CHECK: // %bb.0:86; CHECK-NEXT: eor w8, w0, #0xff000087; CHECK-NEXT: tst w1, #0x188; CHECK-NEXT: csel w8, w8, w0, ne89; CHECK-NEXT: lsl w0, w8, #890; CHECK-NEXT: str w0, [x2]91; CHECK-NEXT: ret92 %t0 = xor i32 %x, 2147418112 ; 0x7FFF000093 %t1 = select i1 %cond, i32 %t0, i32 %x94 %r = shl i32 %t1, 895 store i32 %r, ptr %dst96 ret i32 %r97}98 99define i32 @add_signbit_select_shl(i32 %x, i1 %cond, ptr %dst) {100; CHECK-LABEL: add_signbit_select_shl:101; CHECK: // %bb.0:102; CHECK-NEXT: sub w8, w0, #16, lsl #12 // =65536103; CHECK-NEXT: tst w1, #0x1104; CHECK-NEXT: csel w8, w8, w0, ne105; CHECK-NEXT: lsl w0, w8, #8106; CHECK-NEXT: str w0, [x2]107; CHECK-NEXT: ret108 %t0 = add i32 %x, 4294901760 ; 0xFFFF0000109 %t1 = select i1 %cond, i32 %t0, i32 %x110 %r = shl i32 %t1, 8111 store i32 %r, ptr %dst112 ret i32 %r113}114define i32 @add_nosignbit_select_shl(i32 %x, i1 %cond, ptr %dst) {115; CHECK-LABEL: add_nosignbit_select_shl:116; CHECK: // %bb.0:117; CHECK-NEXT: mov w8, #2147418112118; CHECK-NEXT: tst w1, #0x1119; CHECK-NEXT: add w8, w0, w8120; CHECK-NEXT: csel w8, w8, w0, ne121; CHECK-NEXT: lsl w0, w8, #8122; CHECK-NEXT: str w0, [x2]123; CHECK-NEXT: ret124 %t0 = add i32 %x, 2147418112 ; 0x7FFF0000125 %t1 = select i1 %cond, i32 %t0, i32 %x126 %r = shl i32 %t1, 8127 store i32 %r, ptr %dst128 ret i32 %r129}130 131; logical shift right132 133define i32 @and_signbit_select_lshr(i32 %x, i1 %cond, ptr %dst) {134; CHECK-LABEL: and_signbit_select_lshr:135; CHECK: // %bb.0:136; CHECK-NEXT: and w8, w0, #0xffff0000137; CHECK-NEXT: tst w1, #0x1138; CHECK-NEXT: csel w8, w8, w0, ne139; CHECK-NEXT: lsr w0, w8, #8140; CHECK-NEXT: str w0, [x2]141; CHECK-NEXT: ret142 %t0 = and i32 %x, 4294901760 ; 0xFFFF0000143 %t1 = select i1 %cond, i32 %t0, i32 %x144 %r = lshr i32 %t1, 8145 store i32 %r, ptr %dst146 ret i32 %r147}148define i32 @and_nosignbit_select_lshr(i32 %x, i1 %cond, ptr %dst) {149; CHECK-LABEL: and_nosignbit_select_lshr:150; CHECK: // %bb.0:151; CHECK-NEXT: and w8, w0, #0x7fff0000152; CHECK-NEXT: tst w1, #0x1153; CHECK-NEXT: csel w8, w8, w0, ne154; CHECK-NEXT: lsr w0, w8, #8155; CHECK-NEXT: str w0, [x2]156; CHECK-NEXT: ret157 %t0 = and i32 %x, 2147418112 ; 0x7FFF0000158 %t1 = select i1 %cond, i32 %t0, i32 %x159 %r = lshr i32 %t1, 8160 store i32 %r, ptr %dst161 ret i32 %r162}163 164define i32 @or_signbit_select_lshr(i32 %x, i1 %cond, ptr %dst) {165; CHECK-LABEL: or_signbit_select_lshr:166; CHECK: // %bb.0:167; CHECK-NEXT: orr w8, w0, #0xffff0000168; CHECK-NEXT: tst w1, #0x1169; CHECK-NEXT: csel w8, w8, w0, ne170; CHECK-NEXT: lsr w0, w8, #8171; CHECK-NEXT: str w0, [x2]172; CHECK-NEXT: ret173 %t0 = or i32 %x, 4294901760 ; 0xFFFF0000174 %t1 = select i1 %cond, i32 %t0, i32 %x175 %r = lshr i32 %t1, 8176 store i32 %r, ptr %dst177 ret i32 %r178}179define i32 @or_nosignbit_select_lshr(i32 %x, i1 %cond, ptr %dst) {180; CHECK-LABEL: or_nosignbit_select_lshr:181; CHECK: // %bb.0:182; CHECK-NEXT: orr w8, w0, #0x7fff0000183; CHECK-NEXT: tst w1, #0x1184; CHECK-NEXT: csel w8, w8, w0, ne185; CHECK-NEXT: lsr w0, w8, #8186; CHECK-NEXT: str w0, [x2]187; CHECK-NEXT: ret188 %t0 = or i32 %x, 2147418112 ; 0x7FFF0000189 %t1 = select i1 %cond, i32 %t0, i32 %x190 %r = lshr i32 %t1, 8191 store i32 %r, ptr %dst192 ret i32 %r193}194 195define i32 @xor_signbit_select_lshr(i32 %x, i1 %cond, ptr %dst) {196; CHECK-LABEL: xor_signbit_select_lshr:197; CHECK: // %bb.0:198; CHECK-NEXT: eor w8, w0, #0xffff0000199; CHECK-NEXT: tst w1, #0x1200; CHECK-NEXT: csel w8, w8, w0, ne201; CHECK-NEXT: lsr w0, w8, #8202; CHECK-NEXT: str w0, [x2]203; CHECK-NEXT: ret204 %t0 = xor i32 %x, 4294901760 ; 0xFFFF0000205 %t1 = select i1 %cond, i32 %t0, i32 %x206 %r = lshr i32 %t1, 8207 store i32 %r, ptr %dst208 ret i32 %r209}210define i32 @xor_nosignbit_select_lshr(i32 %x, i1 %cond, ptr %dst) {211; CHECK-LABEL: xor_nosignbit_select_lshr:212; CHECK: // %bb.0:213; CHECK-NEXT: eor w8, w0, #0x7fff0000214; CHECK-NEXT: tst w1, #0x1215; CHECK-NEXT: csel w8, w8, w0, ne216; CHECK-NEXT: lsr w0, w8, #8217; CHECK-NEXT: str w0, [x2]218; CHECK-NEXT: ret219 %t0 = xor i32 %x, 2147418112 ; 0x7FFF0000220 %t1 = select i1 %cond, i32 %t0, i32 %x221 %r = lshr i32 %t1, 8222 store i32 %r, ptr %dst223 ret i32 %r224}225 226define i32 @add_signbit_select_lshr(i32 %x, i1 %cond, ptr %dst) {227; CHECK-LABEL: add_signbit_select_lshr:228; CHECK: // %bb.0:229; CHECK-NEXT: sub w8, w0, #16, lsl #12 // =65536230; CHECK-NEXT: tst w1, #0x1231; CHECK-NEXT: csel w8, w8, w0, ne232; CHECK-NEXT: lsr w0, w8, #8233; CHECK-NEXT: str w0, [x2]234; CHECK-NEXT: ret235 %t0 = add i32 %x, 4294901760 ; 0xFFFF0000236 %t1 = select i1 %cond, i32 %t0, i32 %x237 %r = lshr i32 %t1, 8238 store i32 %r, ptr %dst239 ret i32 %r240}241define i32 @add_nosignbit_select_lshr(i32 %x, i1 %cond, ptr %dst) {242; CHECK-LABEL: add_nosignbit_select_lshr:243; CHECK: // %bb.0:244; CHECK-NEXT: mov w8, #2147418112245; CHECK-NEXT: tst w1, #0x1246; CHECK-NEXT: add w8, w0, w8247; CHECK-NEXT: csel w8, w8, w0, ne248; CHECK-NEXT: lsr w0, w8, #8249; CHECK-NEXT: str w0, [x2]250; CHECK-NEXT: ret251 %t0 = add i32 %x, 2147418112 ; 0x7FFF0000252 %t1 = select i1 %cond, i32 %t0, i32 %x253 %r = lshr i32 %t1, 8254 store i32 %r, ptr %dst255 ret i32 %r256}257 258; arithmetic shift right259 260define i32 @and_signbit_select_ashr(i32 %x, i1 %cond, ptr %dst) {261; CHECK-LABEL: and_signbit_select_ashr:262; CHECK: // %bb.0:263; CHECK-NEXT: and w8, w0, #0xffff0000264; CHECK-NEXT: tst w1, #0x1265; CHECK-NEXT: csel w8, w8, w0, ne266; CHECK-NEXT: asr w0, w8, #8267; CHECK-NEXT: str w0, [x2]268; CHECK-NEXT: ret269 %t0 = and i32 %x, 4294901760 ; 0xFFFF0000270 %t1 = select i1 %cond, i32 %t0, i32 %x271 %r = ashr i32 %t1, 8272 store i32 %r, ptr %dst273 ret i32 %r274}275define i32 @and_nosignbit_select_ashr(i32 %x, i1 %cond, ptr %dst) {276; CHECK-LABEL: and_nosignbit_select_ashr:277; CHECK: // %bb.0:278; CHECK-NEXT: and w8, w0, #0x7fff0000279; CHECK-NEXT: tst w1, #0x1280; CHECK-NEXT: csel w8, w8, w0, ne281; CHECK-NEXT: asr w0, w8, #8282; CHECK-NEXT: str w0, [x2]283; CHECK-NEXT: ret284 %t0 = and i32 %x, 2147418112 ; 0x7FFF0000285 %t1 = select i1 %cond, i32 %t0, i32 %x286 %r = ashr i32 %t1, 8287 store i32 %r, ptr %dst288 ret i32 %r289}290 291define i32 @or_signbit_select_ashr(i32 %x, i1 %cond, ptr %dst) {292; CHECK-LABEL: or_signbit_select_ashr:293; CHECK: // %bb.0:294; CHECK-NEXT: orr w8, w0, #0xffff0000295; CHECK-NEXT: tst w1, #0x1296; CHECK-NEXT: csel w8, w8, w0, ne297; CHECK-NEXT: asr w0, w8, #8298; CHECK-NEXT: str w0, [x2]299; CHECK-NEXT: ret300 %t0 = or i32 %x, 4294901760 ; 0xFFFF0000301 %t1 = select i1 %cond, i32 %t0, i32 %x302 %r = ashr i32 %t1, 8303 store i32 %r, ptr %dst304 ret i32 %r305}306define i32 @or_nosignbit_select_ashr(i32 %x, i1 %cond, ptr %dst) {307; CHECK-LABEL: or_nosignbit_select_ashr:308; CHECK: // %bb.0:309; CHECK-NEXT: orr w8, w0, #0x7fff0000310; CHECK-NEXT: tst w1, #0x1311; CHECK-NEXT: csel w8, w8, w0, ne312; CHECK-NEXT: asr w0, w8, #8313; CHECK-NEXT: str w0, [x2]314; CHECK-NEXT: ret315 %t0 = or i32 %x, 2147418112 ; 0x7FFF0000316 %t1 = select i1 %cond, i32 %t0, i32 %x317 %r = ashr i32 %t1, 8318 store i32 %r, ptr %dst319 ret i32 %r320}321 322define i32 @xor_signbit_select_ashr(i32 %x, i1 %cond, ptr %dst) {323; CHECK-LABEL: xor_signbit_select_ashr:324; CHECK: // %bb.0:325; CHECK-NEXT: eor w8, w0, #0xffff0000326; CHECK-NEXT: tst w1, #0x1327; CHECK-NEXT: csel w8, w8, w0, ne328; CHECK-NEXT: asr w0, w8, #8329; CHECK-NEXT: str w0, [x2]330; CHECK-NEXT: ret331 %t0 = xor i32 %x, 4294901760 ; 0xFFFF0000332 %t1 = select i1 %cond, i32 %t0, i32 %x333 %r = ashr i32 %t1, 8334 store i32 %r, ptr %dst335 ret i32 %r336}337define i32 @xor_nosignbit_select_ashr(i32 %x, i1 %cond, ptr %dst) {338; CHECK-LABEL: xor_nosignbit_select_ashr:339; CHECK: // %bb.0:340; CHECK-NEXT: eor w8, w0, #0x7fff0000341; CHECK-NEXT: tst w1, #0x1342; CHECK-NEXT: csel w8, w8, w0, ne343; CHECK-NEXT: asr w0, w8, #8344; CHECK-NEXT: str w0, [x2]345; CHECK-NEXT: ret346 %t0 = xor i32 %x, 2147418112 ; 0x7FFF0000347 %t1 = select i1 %cond, i32 %t0, i32 %x348 %r = ashr i32 %t1, 8349 store i32 %r, ptr %dst350 ret i32 %r351}352 353define i32 @add_signbit_select_ashr(i32 %x, i1 %cond, ptr %dst) {354; CHECK-LABEL: add_signbit_select_ashr:355; CHECK: // %bb.0:356; CHECK-NEXT: sub w8, w0, #16, lsl #12 // =65536357; CHECK-NEXT: tst w1, #0x1358; CHECK-NEXT: csel w8, w8, w0, ne359; CHECK-NEXT: asr w0, w8, #8360; CHECK-NEXT: str w0, [x2]361; CHECK-NEXT: ret362 %t0 = add i32 %x, 4294901760 ; 0xFFFF0000363 %t1 = select i1 %cond, i32 %t0, i32 %x364 %r = ashr i32 %t1, 8365 store i32 %r, ptr %dst366 ret i32 %r367}368define i32 @add_nosignbit_select_ashr(i32 %x, i1 %cond, ptr %dst) {369; CHECK-LABEL: add_nosignbit_select_ashr:370; CHECK: // %bb.0:371; CHECK-NEXT: mov w8, #2147418112372; CHECK-NEXT: tst w1, #0x1373; CHECK-NEXT: add w8, w0, w8374; CHECK-NEXT: csel w8, w8, w0, ne375; CHECK-NEXT: asr w0, w8, #8376; CHECK-NEXT: str w0, [x2]377; CHECK-NEXT: ret378 %t0 = add i32 %x, 2147418112 ; 0x7FFF0000379 %t1 = select i1 %cond, i32 %t0, i32 %x380 %r = ashr i32 %t1, 8381 store i32 %r, ptr %dst382 ret i32 %r383}384