blob: bcedcf0aaaa0f7a5afb789c85ecf67c3ee6ee406 [file] [log] [blame]
Chad Rosier11ab9412014-08-14 15:23:01 +00001; RUN: opt < %s -reassociate -constprop -instcombine -S | FileCheck %s
2
3define float @test1(float %A, float %B) {
Sanjay Patelc019c392017-11-09 18:26:49 +00004; CHECK-LABEL: @test1(
5; CHECK-NEXT: [[W:%.*]] = fadd float %B, 5.000000e+00
6; CHECK-NEXT: [[X:%.*]] = fadd float %A, -7.000000e+00
7; CHECK-NEXT: [[Y:%.*]] = fsub float [[X]], [[W]]
8; CHECK-NEXT: [[Z:%.*]] = fadd float [[Y]], 1.200000e+01
9; CHECK-NEXT: ret float [[Z]]
10;
Chad Rosier11ab9412014-08-14 15:23:01 +000011 %W = fadd float 5.0, %B
12 %X = fadd float -7.0, %A
13 %Y = fsub float %X, %W
14 %Z = fadd float %Y, 12.0
15 ret float %Z
16}
17
18; With sub reassociation, constant folding can eliminate all of the constants.
19define float @test2(float %A, float %B) {
Sanjay Patelc019c392017-11-09 18:26:49 +000020; CHECK-LABEL: @test2(
21; CHECK-NEXT: [[Z:%.*]] = fsub fast float %A, %B
22; CHECK-NEXT: ret float [[Z]]
23;
Chad Rosier11ab9412014-08-14 15:23:01 +000024 %W = fadd fast float %B, 5.000000e+00
25 %X = fadd fast float %A, -7.000000e+00
26 %Y = fsub fast float %X, %W
27 %Z = fadd fast float %Y, 1.200000e+01
28 ret float %Z
29
30}
31
32define float @test3(float %A, float %B, float %C, float %D) {
Sanjay Patelc019c392017-11-09 18:26:49 +000033; CHECK-LABEL: @test3(
34; CHECK-NEXT: [[M:%.*]] = fadd float %A, 1.200000e+01
35; CHECK-NEXT: [[N:%.*]] = fadd float [[M]], %B
36; CHECK-NEXT: [[O:%.*]] = fadd float [[N]], %C
37; CHECK-NEXT: [[P:%.*]] = fsub float %D, [[O]]
38; CHECK-NEXT: [[Q:%.*]] = fadd float [[P]], 1.200000e+01
39; CHECK-NEXT: ret float [[Q]]
40;
Chad Rosier11ab9412014-08-14 15:23:01 +000041 %M = fadd float %A, 1.200000e+01
42 %N = fadd float %M, %B
43 %O = fadd float %N, %C
44 %P = fsub float %D, %O
45 %Q = fadd float %P, 1.200000e+01
46 ret float %Q
47}
48
49; With sub reassociation, constant folding can eliminate the two 12 constants.
50define float @test4(float %A, float %B, float %C, float %D) {
Chad Rosier11ab9412014-08-14 15:23:01 +000051; FIXME: InstCombine should be able to get us to the following:
52; %sum = fadd fast float %B, %A
53; %sum1 = fadd fast float %sum, %C
54; %Q = fsub fast float %D, %sum1
55; ret i32 %Q
Sanjay Patelc019c392017-11-09 18:26:49 +000056; CHECK-LABEL: @test4(
57; CHECK-NEXT: [[B_NEG:%.*]] = fsub fast float -0.000000e+00, %B
58; CHECK-NEXT: [[O_NEG:%.*]] = fsub fast float [[B_NEG]], %A
59; CHECK-NEXT: [[P:%.*]] = fsub fast float [[O_NEG]], %C
60; CHECK-NEXT: [[Q:%.*]] = fadd fast float [[P]], %D
61; CHECK-NEXT: ret float [[Q]]
62;
Chad Rosier11ab9412014-08-14 15:23:01 +000063 %M = fadd fast float 1.200000e+01, %A
64 %N = fadd fast float %M, %B
65 %O = fadd fast float %N, %C
66 %P = fsub fast float %D, %O
67 %Q = fadd fast float 1.200000e+01, %P
68 ret float %Q
69}
Sanjay Patelc019c392017-11-09 18:26:49 +000070