brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.6 KiB · 5d8beca Raw
309 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4; shift left5 6define i32 @and_signbit_select_shl(i32 %x, i1 %cond) {7; CHECK-LABEL: @and_signbit_select_shl(8; CHECK-NEXT:    [[TMP1:%.*]] = shl i32 [[X:%.*]], 89; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], -1677721610; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]11; CHECK-NEXT:    ret i32 [[R]]12;13  %t0 = and i32 %x, 4294901760 ; 0xFFFF000014  %t1 = select i1 %cond, i32 %t0, i32 %x15  %r = shl i32 %t1, 816  ret i32 %r17}18define i32 @and_nosignbit_select_shl(i32 %x, i1 %cond) {19; CHECK-LABEL: @and_nosignbit_select_shl(20; CHECK-NEXT:    [[TMP1:%.*]] = shl i32 [[X:%.*]], 821; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], -1677721622; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]23; CHECK-NEXT:    ret i32 [[R]]24;25  %t0 = and i32 %x, 2147418112 ; 0x7FFF000026  %t1 = select i1 %cond, i32 %t0, i32 %x27  %r = shl i32 %t1, 828  ret i32 %r29}30 31define i32 @or_signbit_select_shl(i32 %x, i1 %cond) {32; CHECK-LABEL: @or_signbit_select_shl(33; CHECK-NEXT:    [[TMP1:%.*]] = shl i32 [[X:%.*]], 834; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], -1677721635; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]36; CHECK-NEXT:    ret i32 [[R]]37;38  %t0 = or i32 %x, 4294901760 ; 0xFFFF000039  %t1 = select i1 %cond, i32 %t0, i32 %x40  %r = shl i32 %t1, 841  ret i32 %r42}43define i32 @or_nosignbit_select_shl(i32 %x, i1 %cond) {44; CHECK-LABEL: @or_nosignbit_select_shl(45; CHECK-NEXT:    [[TMP1:%.*]] = shl i32 [[X:%.*]], 846; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], -1677721647; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]48; CHECK-NEXT:    ret i32 [[R]]49;50  %t0 = or i32 %x, 2147418112 ; 0x7FFF000051  %t1 = select i1 %cond, i32 %t0, i32 %x52  %r = shl i32 %t1, 853  ret i32 %r54}55 56define i32 @xor_signbit_select_shl(i32 %x, i1 %cond) {57; CHECK-LABEL: @xor_signbit_select_shl(58; CHECK-NEXT:    [[TMP1:%.*]] = shl i32 [[X:%.*]], 859; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[TMP1]], -1677721660; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]61; CHECK-NEXT:    ret i32 [[R]]62;63  %t0 = xor i32 %x, 4294901760 ; 0xFFFF000064  %t1 = select i1 %cond, i32 %t0, i32 %x65  %r = shl i32 %t1, 866  ret i32 %r67}68define i32 @xor_nosignbit_select_shl(i32 %x, i1 %cond) {69; CHECK-LABEL: @xor_nosignbit_select_shl(70; CHECK-NEXT:    [[TMP1:%.*]] = shl i32 [[X:%.*]], 871; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[TMP1]], -1677721672; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]73; CHECK-NEXT:    ret i32 [[R]]74;75  %t0 = xor i32 %x, 2147418112 ; 0x7FFF000076  %t1 = select i1 %cond, i32 %t0, i32 %x77  %r = shl i32 %t1, 878  ret i32 %r79}80 81define i32 @add_signbit_select_shl(i32 %x, i1 %cond) {82; CHECK-LABEL: @add_signbit_select_shl(83; CHECK-NEXT:    [[TMP1:%.*]] = shl i32 [[X:%.*]], 884; CHECK-NEXT:    [[TMP2:%.*]] = add i32 [[TMP1]], -1677721685; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]86; CHECK-NEXT:    ret i32 [[R]]87;88  %t0 = add i32 %x, 4294901760 ; 0xFFFF000089  %t1 = select i1 %cond, i32 %t0, i32 %x90  %r = shl i32 %t1, 891  ret i32 %r92}93define i32 @add_nosignbit_select_shl(i32 %x, i1 %cond) {94; CHECK-LABEL: @add_nosignbit_select_shl(95; CHECK-NEXT:    [[TMP1:%.*]] = shl i32 [[X:%.*]], 896; CHECK-NEXT:    [[TMP2:%.*]] = add i32 [[TMP1]], -1677721697; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]98; CHECK-NEXT:    ret i32 [[R]]99;100  %t0 = add i32 %x, 2147418112 ; 0x7FFF0000101  %t1 = select i1 %cond, i32 %t0, i32 %x102  %r = shl i32 %t1, 8103  ret i32 %r104}105 106; logical shift right107 108define i32 @and_signbit_select_lshr(i32 %x, i1 %cond) {109; CHECK-LABEL: @and_signbit_select_lshr(110; CHECK-NEXT:    [[TMP1:%.*]] = lshr i32 [[X:%.*]], 8111; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], 16776960112; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]113; CHECK-NEXT:    ret i32 [[R]]114;115  %t0 = and i32 %x, 4294901760 ; 0xFFFF0000116  %t1 = select i1 %cond, i32 %t0, i32 %x117  %r = lshr i32 %t1, 8118  ret i32 %r119}120define i32 @and_nosignbit_select_lshr(i32 %x, i1 %cond) {121; CHECK-LABEL: @and_nosignbit_select_lshr(122; CHECK-NEXT:    [[TMP1:%.*]] = lshr i32 [[X:%.*]], 8123; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], 8388352124; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]125; CHECK-NEXT:    ret i32 [[R]]126;127  %t0 = and i32 %x, 2147418112 ; 0x7FFF0000128  %t1 = select i1 %cond, i32 %t0, i32 %x129  %r = lshr i32 %t1, 8130  ret i32 %r131}132 133define i32 @or_signbit_select_lshr(i32 %x, i1 %cond) {134; CHECK-LABEL: @or_signbit_select_lshr(135; CHECK-NEXT:    [[TMP1:%.*]] = lshr i32 [[X:%.*]], 8136; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], 16776960137; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]138; CHECK-NEXT:    ret i32 [[R]]139;140  %t0 = or i32 %x, 4294901760 ; 0xFFFF0000141  %t1 = select i1 %cond, i32 %t0, i32 %x142  %r = lshr i32 %t1, 8143  ret i32 %r144}145define i32 @or_nosignbit_select_lshr(i32 %x, i1 %cond) {146; CHECK-LABEL: @or_nosignbit_select_lshr(147; CHECK-NEXT:    [[TMP1:%.*]] = lshr i32 [[X:%.*]], 8148; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], 8388352149; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]150; CHECK-NEXT:    ret i32 [[R]]151;152  %t0 = or i32 %x, 2147418112 ; 0x7FFF0000153  %t1 = select i1 %cond, i32 %t0, i32 %x154  %r = lshr i32 %t1, 8155  ret i32 %r156}157 158define i32 @xor_signbit_select_lshr(i32 %x, i1 %cond) {159; CHECK-LABEL: @xor_signbit_select_lshr(160; CHECK-NEXT:    [[TMP1:%.*]] = lshr i32 [[X:%.*]], 8161; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[TMP1]], 16776960162; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]163; CHECK-NEXT:    ret i32 [[R]]164;165  %t0 = xor i32 %x, 4294901760 ; 0xFFFF0000166  %t1 = select i1 %cond, i32 %t0, i32 %x167  %r = lshr i32 %t1, 8168  ret i32 %r169}170define i32 @xor_nosignbit_select_lshr(i32 %x, i1 %cond) {171; CHECK-LABEL: @xor_nosignbit_select_lshr(172; CHECK-NEXT:    [[TMP1:%.*]] = lshr i32 [[X:%.*]], 8173; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[TMP1]], 8388352174; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]175; CHECK-NEXT:    ret i32 [[R]]176;177  %t0 = xor i32 %x, 2147418112 ; 0x7FFF0000178  %t1 = select i1 %cond, i32 %t0, i32 %x179  %r = lshr i32 %t1, 8180  ret i32 %r181}182 183define i32 @add_signbit_select_lshr(i32 %x, i1 %cond) {184; CHECK-LABEL: @add_signbit_select_lshr(185; CHECK-NEXT:    [[T0:%.*]] = add i32 [[X:%.*]], -65536186; CHECK-NEXT:    [[T1:%.*]] = select i1 [[COND:%.*]], i32 [[T0]], i32 [[X]]187; CHECK-NEXT:    [[R:%.*]] = lshr i32 [[T1]], 8188; CHECK-NEXT:    ret i32 [[R]]189;190  %t0 = add i32 %x, 4294901760 ; 0xFFFF0000191  %t1 = select i1 %cond, i32 %t0, i32 %x192  %r = lshr i32 %t1, 8193  ret i32 %r194}195define i32 @add_nosignbit_select_lshr(i32 %x, i1 %cond) {196; CHECK-LABEL: @add_nosignbit_select_lshr(197; CHECK-NEXT:    [[T0:%.*]] = add i32 [[X:%.*]], 2147418112198; CHECK-NEXT:    [[T1:%.*]] = select i1 [[COND:%.*]], i32 [[T0]], i32 [[X]]199; CHECK-NEXT:    [[R:%.*]] = lshr i32 [[T1]], 8200; CHECK-NEXT:    ret i32 [[R]]201;202  %t0 = add i32 %x, 2147418112 ; 0x7FFF0000203  %t1 = select i1 %cond, i32 %t0, i32 %x204  %r = lshr i32 %t1, 8205  ret i32 %r206}207 208; arithmetic shift right209 210define i32 @and_signbit_select_ashr(i32 %x, i1 %cond) {211; CHECK-LABEL: @and_signbit_select_ashr(212; CHECK-NEXT:    [[TMP1:%.*]] = ashr i32 [[X:%.*]], 8213; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], -256214; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]215; CHECK-NEXT:    ret i32 [[R]]216;217  %t0 = and i32 %x, 4294901760 ; 0xFFFF0000218  %t1 = select i1 %cond, i32 %t0, i32 %x219  %r = ashr i32 %t1, 8220  ret i32 %r221}222define i32 @and_nosignbit_select_ashr(i32 %x, i1 %cond) {223; CHECK-LABEL: @and_nosignbit_select_ashr(224; CHECK-NEXT:    [[TMP1:%.*]] = ashr i32 [[X:%.*]], 8225; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], 8388352226; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]227; CHECK-NEXT:    ret i32 [[R]]228;229  %t0 = and i32 %x, 2147418112 ; 0x7FFF0000230  %t1 = select i1 %cond, i32 %t0, i32 %x231  %r = ashr i32 %t1, 8232  ret i32 %r233}234 235define i32 @or_signbit_select_ashr(i32 %x, i1 %cond) {236; CHECK-LABEL: @or_signbit_select_ashr(237; CHECK-NEXT:    [[TMP1:%.*]] = ashr i32 [[X:%.*]], 8238; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], -256239; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]240; CHECK-NEXT:    ret i32 [[R]]241;242  %t0 = or i32 %x, 4294901760 ; 0xFFFF0000243  %t1 = select i1 %cond, i32 %t0, i32 %x244  %r = ashr i32 %t1, 8245  ret i32 %r246}247define i32 @or_nosignbit_select_ashr(i32 %x, i1 %cond) {248; CHECK-LABEL: @or_nosignbit_select_ashr(249; CHECK-NEXT:    [[TMP1:%.*]] = ashr i32 [[X:%.*]], 8250; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], 8388352251; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]252; CHECK-NEXT:    ret i32 [[R]]253;254  %t0 = or i32 %x, 2147418112 ; 0x7FFF0000255  %t1 = select i1 %cond, i32 %t0, i32 %x256  %r = ashr i32 %t1, 8257  ret i32 %r258}259 260define i32 @xor_signbit_select_ashr(i32 %x, i1 %cond) {261; CHECK-LABEL: @xor_signbit_select_ashr(262; CHECK-NEXT:    [[TMP1:%.*]] = ashr i32 [[X:%.*]], 8263; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[TMP1]], -256264; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]265; CHECK-NEXT:    ret i32 [[R]]266;267  %t0 = xor i32 %x, 4294901760 ; 0xFFFF0000268  %t1 = select i1 %cond, i32 %t0, i32 %x269  %r = ashr i32 %t1, 8270  ret i32 %r271}272define i32 @xor_nosignbit_select_ashr(i32 %x, i1 %cond) {273; CHECK-LABEL: @xor_nosignbit_select_ashr(274; CHECK-NEXT:    [[TMP1:%.*]] = ashr i32 [[X:%.*]], 8275; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[TMP1]], 8388352276; CHECK-NEXT:    [[R:%.*]] = select i1 [[COND:%.*]], i32 [[TMP2]], i32 [[TMP1]]277; CHECK-NEXT:    ret i32 [[R]]278;279  %t0 = xor i32 %x, 2147418112 ; 0x7FFF0000280  %t1 = select i1 %cond, i32 %t0, i32 %x281  %r = ashr i32 %t1, 8282  ret i32 %r283}284 285define i32 @add_signbit_select_ashr(i32 %x, i1 %cond) {286; CHECK-LABEL: @add_signbit_select_ashr(287; CHECK-NEXT:    [[T0:%.*]] = add i32 [[X:%.*]], -65536288; CHECK-NEXT:    [[T1:%.*]] = select i1 [[COND:%.*]], i32 [[T0]], i32 [[X]]289; CHECK-NEXT:    [[R:%.*]] = ashr i32 [[T1]], 8290; CHECK-NEXT:    ret i32 [[R]]291;292  %t0 = add i32 %x, 4294901760 ; 0xFFFF0000293  %t1 = select i1 %cond, i32 %t0, i32 %x294  %r = ashr i32 %t1, 8295  ret i32 %r296}297define i32 @add_nosignbit_select_ashr(i32 %x, i1 %cond) {298; CHECK-LABEL: @add_nosignbit_select_ashr(299; CHECK-NEXT:    [[T0:%.*]] = add i32 [[X:%.*]], 2147418112300; CHECK-NEXT:    [[T1:%.*]] = select i1 [[COND:%.*]], i32 [[T0]], i32 [[X]]301; CHECK-NEXT:    [[R:%.*]] = ashr i32 [[T1]], 8302; CHECK-NEXT:    ret i32 [[R]]303;304  %t0 = add i32 %x, 2147418112 ; 0x7FFF0000305  %t1 = select i1 %cond, i32 %t0, i32 %x306  %r = ashr i32 %t1, 8307  ret i32 %r308}309