261 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_shl(i32 %x) {7; CHECK-LABEL: @and_signbit_shl(8; CHECK-NEXT: [[T0:%.*]] = shl i32 [[X:%.*]], 89; CHECK-NEXT: [[R:%.*]] = and i32 [[T0]], -1677721610; CHECK-NEXT: ret i32 [[R]]11;12 %t0 = and i32 %x, 4294901760 ; 0xFFFF000013 %r = shl i32 %t0, 814 ret i32 %r15}16define i32 @and_nosignbit_shl(i32 %x) {17; CHECK-LABEL: @and_nosignbit_shl(18; CHECK-NEXT: [[T0:%.*]] = shl i32 [[X:%.*]], 819; CHECK-NEXT: [[R:%.*]] = and i32 [[T0]], -1677721620; CHECK-NEXT: ret i32 [[R]]21;22 %t0 = and i32 %x, 2147418112 ; 0x7FFF000023 %r = shl i32 %t0, 824 ret i32 %r25}26 27define i32 @or_signbit_shl(i32 %x) {28; CHECK-LABEL: @or_signbit_shl(29; CHECK-NEXT: [[T0:%.*]] = shl i32 [[X:%.*]], 830; CHECK-NEXT: [[R:%.*]] = or i32 [[T0]], -1677721631; CHECK-NEXT: ret i32 [[R]]32;33 %t0 = or i32 %x, 4294901760 ; 0xFFFF000034 %r = shl i32 %t0, 835 ret i32 %r36}37define i32 @or_nosignbit_shl(i32 %x) {38; CHECK-LABEL: @or_nosignbit_shl(39; CHECK-NEXT: [[T0:%.*]] = shl i32 [[X:%.*]], 840; CHECK-NEXT: [[R:%.*]] = or i32 [[T0]], -1677721641; CHECK-NEXT: ret i32 [[R]]42;43 %t0 = or i32 %x, 2147418112 ; 0x7FFF000044 %r = shl i32 %t0, 845 ret i32 %r46}47 48define i32 @xor_signbit_shl(i32 %x) {49; CHECK-LABEL: @xor_signbit_shl(50; CHECK-NEXT: [[T0:%.*]] = shl i32 [[X:%.*]], 851; CHECK-NEXT: [[R:%.*]] = xor i32 [[T0]], -1677721652; CHECK-NEXT: ret i32 [[R]]53;54 %t0 = xor i32 %x, 4294901760 ; 0xFFFF000055 %r = shl i32 %t0, 856 ret i32 %r57}58define i32 @xor_nosignbit_shl(i32 %x) {59; CHECK-LABEL: @xor_nosignbit_shl(60; CHECK-NEXT: [[T0:%.*]] = shl i32 [[X:%.*]], 861; CHECK-NEXT: [[R:%.*]] = xor i32 [[T0]], -1677721662; CHECK-NEXT: ret i32 [[R]]63;64 %t0 = xor i32 %x, 2147418112 ; 0x7FFF000065 %r = shl i32 %t0, 866 ret i32 %r67}68 69define i32 @add_signbit_shl(i32 %x) {70; CHECK-LABEL: @add_signbit_shl(71; CHECK-NEXT: [[T0:%.*]] = shl i32 [[X:%.*]], 872; CHECK-NEXT: [[R:%.*]] = add i32 [[T0]], -1677721673; CHECK-NEXT: ret i32 [[R]]74;75 %t0 = add i32 %x, 4294901760 ; 0xFFFF000076 %r = shl i32 %t0, 877 ret i32 %r78}79define i32 @add_nosignbit_shl(i32 %x) {80; CHECK-LABEL: @add_nosignbit_shl(81; CHECK-NEXT: [[T0:%.*]] = shl i32 [[X:%.*]], 882; CHECK-NEXT: [[R:%.*]] = add i32 [[T0]], -1677721683; CHECK-NEXT: ret i32 [[R]]84;85 %t0 = add i32 %x, 2147418112 ; 0x7FFF000086 %r = shl i32 %t0, 887 ret i32 %r88}89 90; logical shift right91 92define i32 @and_signbit_lshr(i32 %x) {93; CHECK-LABEL: @and_signbit_lshr(94; CHECK-NEXT: [[T0:%.*]] = lshr i32 [[X:%.*]], 895; CHECK-NEXT: [[R:%.*]] = and i32 [[T0]], 1677696096; CHECK-NEXT: ret i32 [[R]]97;98 %t0 = and i32 %x, 4294901760 ; 0xFFFF000099 %r = lshr i32 %t0, 8100 ret i32 %r101}102define i32 @and_nosignbit_lshr(i32 %x) {103; CHECK-LABEL: @and_nosignbit_lshr(104; CHECK-NEXT: [[T0:%.*]] = lshr i32 [[X:%.*]], 8105; CHECK-NEXT: [[R:%.*]] = and i32 [[T0]], 8388352106; CHECK-NEXT: ret i32 [[R]]107;108 %t0 = and i32 %x, 2147418112 ; 0x7FFF0000109 %r = lshr i32 %t0, 8110 ret i32 %r111}112 113define i32 @or_signbit_lshr(i32 %x) {114; CHECK-LABEL: @or_signbit_lshr(115; CHECK-NEXT: [[T0:%.*]] = lshr i32 [[X:%.*]], 8116; CHECK-NEXT: [[R:%.*]] = or i32 [[T0]], 16776960117; CHECK-NEXT: ret i32 [[R]]118;119 %t0 = or i32 %x, 4294901760 ; 0xFFFF0000120 %r = lshr i32 %t0, 8121 ret i32 %r122}123define i32 @or_nosignbit_lshr(i32 %x) {124; CHECK-LABEL: @or_nosignbit_lshr(125; CHECK-NEXT: [[T0:%.*]] = lshr i32 [[X:%.*]], 8126; CHECK-NEXT: [[R:%.*]] = or i32 [[T0]], 8388352127; CHECK-NEXT: ret i32 [[R]]128;129 %t0 = or i32 %x, 2147418112 ; 0x7FFF0000130 %r = lshr i32 %t0, 8131 ret i32 %r132}133 134define i32 @xor_signbit_lshr(i32 %x) {135; CHECK-LABEL: @xor_signbit_lshr(136; CHECK-NEXT: [[T0:%.*]] = lshr i32 [[X:%.*]], 8137; CHECK-NEXT: [[R:%.*]] = xor i32 [[T0]], 16776960138; CHECK-NEXT: ret i32 [[R]]139;140 %t0 = xor i32 %x, 4294901760 ; 0xFFFF0000141 %r = lshr i32 %t0, 8142 ret i32 %r143}144define i32 @xor_nosignbit_lshr(i32 %x) {145; CHECK-LABEL: @xor_nosignbit_lshr(146; CHECK-NEXT: [[T0:%.*]] = lshr i32 [[X:%.*]], 8147; CHECK-NEXT: [[R:%.*]] = xor i32 [[T0]], 8388352148; CHECK-NEXT: ret i32 [[R]]149;150 %t0 = xor i32 %x, 2147418112 ; 0x7FFF0000151 %r = lshr i32 %t0, 8152 ret i32 %r153}154 155define i32 @add_signbit_lshr(i32 %x) {156; CHECK-LABEL: @add_signbit_lshr(157; CHECK-NEXT: [[T0:%.*]] = add i32 [[X:%.*]], -65536158; CHECK-NEXT: [[R:%.*]] = lshr i32 [[T0]], 8159; CHECK-NEXT: ret i32 [[R]]160;161 %t0 = add i32 %x, 4294901760 ; 0xFFFF0000162 %r = lshr i32 %t0, 8163 ret i32 %r164}165define i32 @add_nosignbit_lshr(i32 %x) {166; CHECK-LABEL: @add_nosignbit_lshr(167; CHECK-NEXT: [[T0:%.*]] = add i32 [[X:%.*]], 2147418112168; CHECK-NEXT: [[R:%.*]] = lshr i32 [[T0]], 8169; CHECK-NEXT: ret i32 [[R]]170;171 %t0 = add i32 %x, 2147418112 ; 0x7FFF0000172 %r = lshr i32 %t0, 8173 ret i32 %r174}175 176; arithmetic shift right177 178define i32 @and_signbit_ashr(i32 %x) {179; CHECK-LABEL: @and_signbit_ashr(180; CHECK-NEXT: [[T0:%.*]] = ashr i32 [[X:%.*]], 8181; CHECK-NEXT: [[R:%.*]] = and i32 [[T0]], -256182; CHECK-NEXT: ret i32 [[R]]183;184 %t0 = and i32 %x, 4294901760 ; 0xFFFF0000185 %r = ashr i32 %t0, 8186 ret i32 %r187}188define i32 @and_nosignbit_ashr(i32 %x) {189; CHECK-LABEL: @and_nosignbit_ashr(190; CHECK-NEXT: [[T0:%.*]] = lshr i32 [[X:%.*]], 8191; CHECK-NEXT: [[R:%.*]] = and i32 [[T0]], 8388352192; CHECK-NEXT: ret i32 [[R]]193;194 %t0 = and i32 %x, 2147418112 ; 0x7FFF0000195 %r = ashr i32 %t0, 8196 ret i32 %r197}198 199define i32 @or_signbit_ashr(i32 %x) {200; CHECK-LABEL: @or_signbit_ashr(201; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[X:%.*]], 8202; CHECK-NEXT: [[R:%.*]] = or i32 [[TMP1]], -256203; CHECK-NEXT: ret i32 [[R]]204;205 %t0 = or i32 %x, 4294901760 ; 0xFFFF0000206 %r = ashr i32 %t0, 8207 ret i32 %r208}209define i32 @or_nosignbit_ashr(i32 %x) {210; CHECK-LABEL: @or_nosignbit_ashr(211; CHECK-NEXT: [[T0:%.*]] = ashr i32 [[X:%.*]], 8212; CHECK-NEXT: [[R:%.*]] = or i32 [[T0]], 8388352213; CHECK-NEXT: ret i32 [[R]]214;215 %t0 = or i32 %x, 2147418112 ; 0x7FFF0000216 %r = ashr i32 %t0, 8217 ret i32 %r218}219 220define i32 @xor_signbit_ashr(i32 %x) {221; CHECK-LABEL: @xor_signbit_ashr(222; CHECK-NEXT: [[T0:%.*]] = ashr i32 [[X:%.*]], 8223; CHECK-NEXT: [[R:%.*]] = xor i32 [[T0]], -256224; CHECK-NEXT: ret i32 [[R]]225;226 %t0 = xor i32 %x, 4294901760 ; 0xFFFF0000227 %r = ashr i32 %t0, 8228 ret i32 %r229}230define i32 @xor_nosignbit_ashr(i32 %x) {231; CHECK-LABEL: @xor_nosignbit_ashr(232; CHECK-NEXT: [[T0:%.*]] = ashr i32 [[X:%.*]], 8233; CHECK-NEXT: [[R:%.*]] = xor i32 [[T0]], 8388352234; CHECK-NEXT: ret i32 [[R]]235;236 %t0 = xor i32 %x, 2147418112 ; 0x7FFF0000237 %r = ashr i32 %t0, 8238 ret i32 %r239}240 241define i32 @add_signbit_ashr(i32 %x) {242; CHECK-LABEL: @add_signbit_ashr(243; CHECK-NEXT: [[T0:%.*]] = add i32 [[X:%.*]], -65536244; CHECK-NEXT: [[R:%.*]] = ashr i32 [[T0]], 8245; CHECK-NEXT: ret i32 [[R]]246;247 %t0 = add i32 %x, 4294901760 ; 0xFFFF0000248 %r = ashr i32 %t0, 8249 ret i32 %r250}251define i32 @add_nosignbit_ashr(i32 %x) {252; CHECK-LABEL: @add_nosignbit_ashr(253; CHECK-NEXT: [[T0:%.*]] = add i32 [[X:%.*]], 2147418112254; CHECK-NEXT: [[R:%.*]] = ashr i32 [[T0]], 8255; CHECK-NEXT: ret i32 [[R]]256;257 %t0 = add i32 %x, 2147418112 ; 0x7FFF0000258 %r = ashr i32 %t0, 8259 ret i32 %r260}261