xref: /aosp_15_r20/external/llvm/test/Transforms/Reassociate/otherops.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Reassociation should apply to Add, Mul, And, Or, & Xor
2*9880d681SAndroid Build Coastguard Worker;
3*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -reassociate -constprop -instcombine -die -S | FileCheck %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mul(i32 %arg) {
6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mul
7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %tmp2 = mul i32 %arg, 144
8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 %tmp2
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker  %tmp1 = mul i32 12, %arg
11*9880d681SAndroid Build Coastguard Worker  %tmp2 = mul i32 %tmp1, 12
12*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp2
13*9880d681SAndroid Build Coastguard Worker}
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerdefine i32 @test_and(i32 %arg) {
16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_and
17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %tmp2 = and i32 %arg, 14
18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 %tmp2
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker  %tmp1 = and i32 14, %arg
21*9880d681SAndroid Build Coastguard Worker  %tmp2 = and i32 %tmp1, 14
22*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp2
23*9880d681SAndroid Build Coastguard Worker}
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Workerdefine i32 @test_or(i32 %arg) {
26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_or
27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %tmp2 = or i32 %arg, 14
28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 %tmp2
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker  %tmp1 = or i32 14, %arg
31*9880d681SAndroid Build Coastguard Worker  %tmp2 = or i32 %tmp1, 14
32*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp2
33*9880d681SAndroid Build Coastguard Worker}
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerdefine i32 @test_xor(i32 %arg) {
36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_xor
37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 %arg
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker  %tmp1 = xor i32 12, %arg
40*9880d681SAndroid Build Coastguard Worker  %tmp2 = xor i32 %tmp1, 12
41*9880d681SAndroid Build Coastguard Worker  ret i32 %tmp2
42*9880d681SAndroid Build Coastguard Worker}
43