xref: /llvm-project/llvm/test/Transforms/Reassociate/binop-identity.ll (revision 211cf8a384ebb29787367c8fd5858e2a5ed3c10f)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=reassociate -S | FileCheck %s
3
4; Don't produce an instruction that is a no-op because the constant is an identity constant.
5
6define i32 @add_0(i32 %x) {
7; CHECK-LABEL: @add_0(
8; CHECK-NEXT:    ret i32 [[X:%.*]]
9;
10  %a1 = add i32 %x, -30
11  %a2 = add i32 %a1, 30
12  ret i32 %a2
13}
14
15define i32 @mul_1(i32 %x) {
16; CHECK-LABEL: @mul_1(
17; CHECK-NEXT:    ret i32 [[X:%.*]]
18;
19  %a1 = mul i32 %x, -1
20  %a2 = mul i32 %a1, -1
21  ret i32 %a2
22}
23
24define i8 @and_neg1(i8 %x) {
25; CHECK-LABEL: @and_neg1(
26; CHECK-NEXT:    ret i8 [[X:%.*]]
27;
28  %a1 = and i8 %x, 255
29  %a2 = and i8 %a1, 255
30  ret i8 %a2
31}
32
33define i8 @or_0(i8 %x) {
34; CHECK-LABEL: @or_0(
35; CHECK-NEXT:    ret i8 [[X:%.*]]
36;
37  %a1 = or i8 %x, 0
38  %a2 = or i8 %a1, 0
39  ret i8 %a2
40}
41
42define i8 @xor_0(i8 %x) {
43; CHECK-LABEL: @xor_0(
44; CHECK-NEXT:    ret i8 [[X:%.*]]
45;
46  %a1 = xor i8 %x, 42
47  %a2 = xor i8 %a1, 42
48  ret i8 %a2
49}
50
51; FIXME - the binop identity constant for fadd is -0.0, so this didn't fold.
52
53define float @fadd_0(float %x) {
54; CHECK-LABEL: @fadd_0(
55; CHECK-NEXT:    [[A2:%.*]] = fadd fast float [[X:%.*]], 0.000000e+00
56; CHECK-NEXT:    ret float [[A2]]
57;
58  %a1 = fadd fast float %x, -30.0
59  %a2 = fadd fast float %a1, 30.0
60  ret float %a2
61}
62
63define float @fmul_1(float %x) {
64; CHECK-LABEL: @fmul_1(
65; CHECK-NEXT:    ret float [[X:%.*]]
66;
67  %a1 = fmul fast float %x, 4.0
68  %a2 = fmul fast float %a1, 0.25
69  ret float %a2
70}
71
72