~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/Transforms/Reassociate/canonicalize-neg-const.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; RUN: opt -reassociate -gvn -S < %s | FileCheck %s
 
2
 
 
3
; (x + 0.1234 * y) * (x + -0.1234 * y) -> (x + 0.1234 * y) * (x - 0.1234 * y)
 
4
define double @test1(double %x, double %y) {
 
5
; CHECK-LABEL: @test1
 
6
; CHECK-NEXT: fmul double %y, 1.234000e-01
 
7
; CHECK-NEXT: fadd double %x, %mul
 
8
; CHECK-NEXT: fsub double %x, %mul
 
9
; CHECK-NEXT: fmul double %add{{.*}}, %add{{.*}}
 
10
; CHECK-NEXT: ret double %mul
 
11
 
 
12
  %mul = fmul double 1.234000e-01, %y
 
13
  %add = fadd double %mul, %x
 
14
  %mul1 = fmul double -1.234000e-01, %y
 
15
  %add2 = fadd double %mul1, %x
 
16
  %mul3 = fmul double %add, %add2
 
17
  ret double %mul3
 
18
}
 
19
 
 
20
; (x + -0.1234 * y) * (x + -0.1234 * y) -> (x - 0.1234 * y) * (x - 0.1234 * y)
 
21
define double @test2(double %x, double %y) {
 
22
; CHECK-LABEL: @test2
 
23
; CHECK-NEXT: fmul double %y, 1.234000e-01
 
24
; CHECK-NEXT: fsub double %x, %mul
 
25
; CHECK-NEXT: fmul double %add{{.*}}, %add{{.*}}
 
26
; CHECK-NEXT: ret double %mul
 
27
 
 
28
  %mul = fmul double %y, -1.234000e-01
 
29
  %add = fadd double %mul, %x
 
30
  %mul1 = fmul double %y, -1.234000e-01
 
31
  %add2 = fadd double %mul1, %x
 
32
  %mul3 = fmul double %add, %add2
 
33
  ret double %mul3
 
34
}
 
35
 
 
36
; (x + 0.1234 * y) * (x - -0.1234 * y) -> (x + 0.1234 * y) * (x + 0.1234 * y)
 
37
define double @test3(double %x, double %y) {
 
38
; CHECK-LABEL: @test3
 
39
; CHECK-NEXT: fmul double %y, 1.234000e-01
 
40
; CHECK-NEXT: fadd double %x, %mul
 
41
; CHECK-NEXT: fmul double %add{{.*}}, %add{{.*}}
 
42
; CHECK-NEXT: ret double
 
43
 
 
44
  %mul = fmul double %y, 1.234000e-01
 
45
  %add = fadd double %mul, %x
 
46
  %mul1 = fmul double %y, -1.234000e-01
 
47
  %add2 = fsub double %x, %mul1
 
48
  %mul3 = fmul double %add, %add2
 
49
  ret double %mul3
 
50
}
 
51
 
 
52
; Canonicalize (x - -0.1234 * y)
 
53
define double @test5(double %x, double %y) {
 
54
; CHECK-LABEL: @test5
 
55
; CHECK-NEXT: fmul double %y, 1.234000e-01
 
56
; CHECK-NEXT: fadd double %x, %mul
 
57
; CHECK-NEXT: ret double
 
58
 
 
59
  %mul = fmul double -1.234000e-01, %y
 
60
  %sub = fsub double %x, %mul
 
61
  ret double %sub
 
62
}
 
63
 
 
64
; Don't modify (-0.1234 * y - x)
 
65
define double @test6(double %x, double %y) {
 
66
; CHECK-LABEL: @test6
 
67
; CHECK-NEXT: fmul double %y, -1.234000e-01
 
68
; CHECK-NEXT: fsub double %mul, %x
 
69
; CHECK-NEXT: ret double %sub
 
70
 
 
71
  %mul = fmul double -1.234000e-01, %y
 
72
  %sub = fsub double %mul, %x
 
73
  ret double %sub
 
74
}
 
75
 
 
76
; Canonicalize (-0.1234 * y + x) -> (x - 0.1234 * y)
 
77
define double @test7(double %x, double %y) {
 
78
; CHECK-LABEL: @test7
 
79
; CHECK-NEXT: fmul double %y, 1.234000e-01
 
80
; CHECK-NEXT: fsub double %x, %mul
 
81
; CHECK-NEXT: ret double %add
 
82
 
 
83
  %mul = fmul double -1.234000e-01, %y
 
84
  %add = fadd double %mul, %x
 
85
  ret double %add
 
86
}
 
87
 
 
88
; Canonicalize (y * -0.1234 + x) -> (x - 0.1234 * y)
 
89
define double @test8(double %x, double %y) {
 
90
; CHECK-LABEL: @test8
 
91
; CHECK-NEXT: fmul double %y, 1.234000e-01
 
92
; CHECK-NEXT: fsub double %x, %mul
 
93
; CHECK-NEXT: ret double %add
 
94
 
 
95
  %mul = fmul double %y, -1.234000e-01
 
96
  %add = fadd double %mul, %x
 
97
  ret double %add
 
98
}
 
99
 
 
100
; Canonicalize (x - -0.1234 / y)
 
101
define double @test9(double %x, double %y) {
 
102
; CHECK-LABEL: @test9
 
103
; CHECK-NEXT: fdiv double 1.234000e-01, %y
 
104
; CHECK-NEXT: fadd double %x, %div
 
105
; CHECK-NEXT: ret double
 
106
 
 
107
  %div = fdiv double -1.234000e-01, %y
 
108
  %sub = fsub double %x, %div
 
109
  ret double %sub
 
110
}
 
111
 
 
112
; Don't modify (-0.1234 / y - x)
 
113
define double @test10(double %x, double %y) {
 
114
; CHECK-LABEL: @test10
 
115
; CHECK-NEXT: fdiv double -1.234000e-01, %y
 
116
; CHECK-NEXT: fsub double %div, %x
 
117
; CHECK-NEXT: ret double %sub
 
118
 
 
119
  %div = fdiv double -1.234000e-01, %y
 
120
  %sub = fsub double %div, %x
 
121
  ret double %sub
 
122
}
 
123
 
 
124
; Canonicalize (-0.1234 / y + x) -> (x - 0.1234 / y)
 
125
define double @test11(double %x, double %y) {
 
126
; CHECK-LABEL: @test11
 
127
; CHECK-NEXT: fdiv double 1.234000e-01, %y
 
128
; CHECK-NEXT: fsub double %x, %div
 
129
; CHECK-NEXT: ret double %add
 
130
 
 
131
  %div = fdiv double -1.234000e-01, %y
 
132
  %add = fadd double %div, %x
 
133
  ret double %add
 
134
}
 
135
 
 
136
; Canonicalize (y / -0.1234 + x) -> (x - y / 0.1234)
 
137
define double @test12(double %x, double %y) {
 
138
; CHECK-LABEL: @test12
 
139
; CHECK-NEXT: fdiv double %y, 1.234000e-01
 
140
; CHECK-NEXT: fsub double %x, %div
 
141
; CHECK-NEXT: ret double %add
 
142
 
 
143
  %div = fdiv double %y, -1.234000e-01
 
144
  %add = fadd double %div, %x
 
145
  ret double %add
 
146
}
 
147
 
 
148
; Don't create an NSW violation
 
149
define i4 @test13(i4 %x) {
 
150
; CHECK-LABEL: @test13
 
151
; CHECK-NEXT: %[[mul:.*]] = mul nsw i4 %x, -2
 
152
; CHECK-NEXT: %[[add:.*]] = add i4 %[[mul]], 3
 
153
  %mul = mul nsw i4 %x, -2
 
154
  %add = add i4 %mul, 3
 
155
  ret i4 %add
 
156
}