brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · cf1285c Raw
82 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4; (x&z) ^ (y&z) -> (x^y)&z5define i32 @test1(i32 %x, i32 %y, i32 %z) {6; CHECK-LABEL: @test1(7; CHECK-NEXT:    [[T61:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]8; CHECK-NEXT:    [[T7:%.*]] = and i32 [[Z:%.*]], [[T61]]9; CHECK-NEXT:    ret i32 [[T7]]10;11  %t3 = and i32 %z, %x12  %t6 = and i32 %z, %y13  %t7 = xor i32 %t3, %t614  ret i32 %t715}16 17; (x & y) ^ (x|y) -> x^y18define i32 @test2(i32 %x, i32 %y, i32 %z) {19; CHECK-LABEL: @test2(20; CHECK-NEXT:    [[T7:%.*]] = xor i32 [[Y:%.*]], [[X:%.*]]21; CHECK-NEXT:    ret i32 [[T7]]22;23  %t3 = and i32 %y, %x24  %t6 = or i32 %y, %x25  %t7 = xor i32 %t3, %t626  ret i32 %t727}28 29define i32 @PR38781(i32 %a, i32 %b) {30; CHECK-LABEL: @PR38781(31; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]32; CHECK-NEXT:    [[AND2:%.*]] = icmp sgt i32 [[TMP1]], -133; CHECK-NEXT:    [[AND:%.*]] = zext i1 [[AND2]] to i3234; CHECK-NEXT:    ret i32 [[AND]]35;36  %a.lobit = lshr i32 %a, 3137  %a.lobit.not = xor i32 %a.lobit, 138  %b.lobit = lshr i32 %b, 3139  %b.lobit.not = xor i32 %b.lobit, 140  %and = and i32 %b.lobit.not, %a.lobit.not41  ret i32 %and42}43 44; (a ^ 4) & (a ^ ~4) -> 045define i32 @PR75692_1(i32 %x) {46; CHECK-LABEL: @PR75692_1(47; CHECK-NEXT:    ret i32 048;49  %t2 = xor i32 %x, 450  %t3 = xor i32 %x, -551  %t4 = and i32 %t2, %t352  ret i32 %t453}54 55; (a ^ 4) & (a ^ 3) is not zero56define i32 @PR75692_2(i32 %x) {57; CHECK-LABEL: @PR75692_2(58; CHECK-NEXT:    [[T2:%.*]] = xor i32 [[X:%.*]], 459; CHECK-NEXT:    [[T3:%.*]] = xor i32 [[X]], -460; CHECK-NEXT:    [[T4:%.*]] = and i32 [[T2]], [[T3]]61; CHECK-NEXT:    ret i32 [[T4]]62;63  %t2 = xor i32 %x, 464  %t3 = xor i32 %x, -465  %t4 = and i32 %t2, %t366  ret i32 %t467}68 69; (a ^ 4) & (b ^ ~4) is not zero, since a != b is possible70define i32 @PR75692_3(i32 %x, i32 %y) {71; CHECK-LABEL: @PR75692_3(72; CHECK-NEXT:    [[T2:%.*]] = xor i32 [[X:%.*]], 473; CHECK-NEXT:    [[T3:%.*]] = xor i32 [[Y:%.*]], -574; CHECK-NEXT:    [[T4:%.*]] = and i32 [[T2]], [[T3]]75; CHECK-NEXT:    ret i32 [[T4]]76;77  %t2 = xor i32 %x, 478  %t3 = xor i32 %y, -579  %t4 = and i32 %t2, %t380  ret i32 %t481}82