@@ -11,9 +11,9 @@ declare double @pow(double, double)
11
11
; pow(x, 3.0)
12
12
define double @test_simplify_3 (double %x ) {
13
13
; CHECK-LABEL: @test_simplify_3(
14
- ; CHECK-NEXT: [[TMP1 :%.*]] = fmul fast double [[X:%.*]], [[X]]
15
- ; CHECK-NEXT: [[TMP2 :%.*]] = fmul fast double [[TMP1 ]], [[X]]
16
- ; CHECK-NEXT: ret double [[TMP2 ]]
14
+ ; CHECK-NEXT: [[SQUARE :%.*]] = fmul fast double [[X:%.*]], [[X]]
15
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fmul fast double [[SQUARE ]], [[X]]
16
+ ; CHECK-NEXT: ret double [[TMP1 ]]
17
17
;
18
18
%1 = call fast double @llvm.pow.f64 (double %x , double 3 .000000e+00 )
19
19
ret double %1
@@ -22,9 +22,9 @@ define double @test_simplify_3(double %x) {
22
22
; powf(x, 4.0)
23
23
define float @test_simplify_4f (float %x ) {
24
24
; CHECK-LABEL: @test_simplify_4f(
25
- ; CHECK-NEXT: [[TMP1 :%.*]] = fmul fast float [[X:%.*]], [[X]]
26
- ; CHECK-NEXT: [[TMP2 :%.*]] = fmul fast float [[TMP1 ]], [[TMP1 ]]
27
- ; CHECK-NEXT: ret float [[TMP2 ]]
25
+ ; CHECK-NEXT: [[SQUARE :%.*]] = fmul fast float [[X:%.*]], [[X]]
26
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fmul fast float [[SQUARE ]], [[SQUARE ]]
27
+ ; CHECK-NEXT: ret float [[TMP1 ]]
28
28
;
29
29
%1 = call fast float @llvm.pow.f32 (float %x , float 4 .000000e+00 )
30
30
ret float %1
@@ -33,9 +33,9 @@ define float @test_simplify_4f(float %x) {
33
33
; pow(x, 4.0)
34
34
define double @test_simplify_4 (double %x ) {
35
35
; CHECK-LABEL: @test_simplify_4(
36
- ; CHECK-NEXT: [[TMP1 :%.*]] = fmul fast double [[X:%.*]], [[X]]
37
- ; CHECK-NEXT: [[TMP2 :%.*]] = fmul fast double [[TMP1 ]], [[TMP1 ]]
38
- ; CHECK-NEXT: ret double [[TMP2 ]]
36
+ ; CHECK-NEXT: [[SQUARE :%.*]] = fmul fast double [[X:%.*]], [[X]]
37
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fmul fast double [[SQUARE ]], [[SQUARE ]]
38
+ ; CHECK-NEXT: ret double [[TMP1 ]]
39
39
;
40
40
%1 = call fast double @llvm.pow.f64 (double %x , double 4 .000000e+00 )
41
41
ret double %1
@@ -44,12 +44,12 @@ define double @test_simplify_4(double %x) {
44
44
; powf(x, <15.0, 15.0>)
45
45
define <2 x float > @test_simplify_15 (<2 x float > %x ) {
46
46
; CHECK-LABEL: @test_simplify_15(
47
- ; CHECK-NEXT: [[TMP1:%.*]] = fmul fast <2 x float> [[X:%.*]], [[X]]
48
- ; CHECK-NEXT: [[TMP2:%.*]] = fmul fast <2 x float> [[TMP1]], [[X]]
47
+ ; CHECK-NEXT: [[SQUARE:%.*]] = fmul fast <2 x float> [[X:%.*]], [[X]]
48
+ ; CHECK-NEXT: [[TMP1:%.*]] = fmul fast <2 x float> [[SQUARE]], [[X]]
49
+ ; CHECK-NEXT: [[TMP2:%.*]] = fmul fast <2 x float> [[TMP1]], [[TMP1]]
49
50
; CHECK-NEXT: [[TMP3:%.*]] = fmul fast <2 x float> [[TMP2]], [[TMP2]]
50
- ; CHECK-NEXT: [[TMP4:%.*]] = fmul fast <2 x float> [[TMP3]], [[TMP3]]
51
- ; CHECK-NEXT: [[TMP5:%.*]] = fmul fast <2 x float> [[TMP2]], [[TMP4]]
52
- ; CHECK-NEXT: ret <2 x float> [[TMP5]]
51
+ ; CHECK-NEXT: [[TMP4:%.*]] = fmul fast <2 x float> [[TMP1]], [[TMP3]]
52
+ ; CHECK-NEXT: ret <2 x float> [[TMP4]]
53
53
;
54
54
%1 = call fast <2 x float > @llvm.pow.v2f32 (<2 x float > %x , <2 x float > <float 1 .500000e+01 , float 1 .500000e+01 >)
55
55
ret <2 x float > %1
@@ -58,12 +58,12 @@ define <2 x float> @test_simplify_15(<2 x float> %x) {
58
58
; pow(x, -7.0)
59
59
define <2 x double > @test_simplify_neg_7 (<2 x double > %x ) {
60
60
; CHECK-LABEL: @test_simplify_neg_7(
61
- ; CHECK-NEXT: [[TMP1 :%.*]] = fmul fast <2 x double> [[X:%.*]], [[X]]
62
- ; CHECK-NEXT: [[TMP2 :%.*]] = fmul fast <2 x double> [[TMP1 ]], [[TMP1 ]]
63
- ; CHECK-NEXT: [[TMP3 :%.*]] = fmul fast <2 x double> [[TMP2 ]], [[X]]
64
- ; CHECK-NEXT: [[TMP4 :%.*]] = fmul fast <2 x double> [[TMP1 ]], [[TMP3 ]]
65
- ; CHECK-NEXT: [[TMP5 :%.*]] = fdiv fast <2 x double> <double 1.000000e+00, double 1.000000e+00>, [[TMP4 ]]
66
- ; CHECK-NEXT: ret <2 x double> [[TMP5 ]]
61
+ ; CHECK-NEXT: [[SQUARE :%.*]] = fmul fast <2 x double> [[X:%.*]], [[X]]
62
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fmul fast <2 x double> [[SQUARE ]], [[SQUARE ]]
63
+ ; CHECK-NEXT: [[TMP2 :%.*]] = fmul fast <2 x double> [[TMP1 ]], [[X]]
64
+ ; CHECK-NEXT: [[TMP3 :%.*]] = fmul fast <2 x double> [[SQUARE ]], [[TMP2 ]]
65
+ ; CHECK-NEXT: [[RECIPROCAL :%.*]] = fdiv fast <2 x double> <double 1.000000e+00, double 1.000000e+00>, [[TMP3 ]]
66
+ ; CHECK-NEXT: ret <2 x double> [[RECIPROCAL ]]
67
67
;
68
68
%1 = call fast <2 x double > @llvm.pow.v2f64 (<2 x double > %x , <2 x double > <double -7 .000000e+00 , double -7 .000000e+00 >)
69
69
ret <2 x double > %1
@@ -72,14 +72,14 @@ define <2 x double> @test_simplify_neg_7(<2 x double> %x) {
72
72
; powf(x, -19.0)
73
73
define float @test_simplify_neg_19 (float %x ) {
74
74
; CHECK-LABEL: @test_simplify_neg_19(
75
- ; CHECK-NEXT: [[TMP1:%.*]] = fmul fast float [[X:%.*]], [[X]]
75
+ ; CHECK-NEXT: [[SQUARE:%.*]] = fmul fast float [[X:%.*]], [[X]]
76
+ ; CHECK-NEXT: [[TMP1:%.*]] = fmul fast float [[SQUARE]], [[SQUARE]]
76
77
; CHECK-NEXT: [[TMP2:%.*]] = fmul fast float [[TMP1]], [[TMP1]]
77
78
; CHECK-NEXT: [[TMP3:%.*]] = fmul fast float [[TMP2]], [[TMP2]]
78
- ; CHECK-NEXT: [[TMP4:%.*]] = fmul fast float [[TMP3]], [[TMP3]]
79
- ; CHECK-NEXT: [[TMP5:%.*]] = fmul fast float [[TMP1]], [[TMP4]]
80
- ; CHECK-NEXT: [[TMP6:%.*]] = fmul fast float [[TMP5]], [[X]]
81
- ; CHECK-NEXT: [[TMP7:%.*]] = fdiv fast float 1.000000e+00, [[TMP6]]
82
- ; CHECK-NEXT: ret float [[TMP7]]
79
+ ; CHECK-NEXT: [[TMP4:%.*]] = fmul fast float [[SQUARE]], [[TMP3]]
80
+ ; CHECK-NEXT: [[TMP5:%.*]] = fmul fast float [[TMP4]], [[X]]
81
+ ; CHECK-NEXT: [[RECIPROCAL:%.*]] = fdiv fast float 1.000000e+00, [[TMP5]]
82
+ ; CHECK-NEXT: ret float [[RECIPROCAL]]
83
83
;
84
84
%1 = call fast float @llvm.pow.f32 (float %x , float -1 .900000e+01 )
85
85
ret float %1
@@ -98,12 +98,12 @@ define double @test_simplify_11_23(double %x) {
98
98
; powf(x, 32.0)
99
99
define float @test_simplify_32 (float %x ) {
100
100
; CHECK-LABEL: @test_simplify_32(
101
- ; CHECK-NEXT: [[TMP1:%.*]] = fmul fast float [[X:%.*]], [[X]]
101
+ ; CHECK-NEXT: [[SQUARE:%.*]] = fmul fast float [[X:%.*]], [[X]]
102
+ ; CHECK-NEXT: [[TMP1:%.*]] = fmul fast float [[SQUARE]], [[SQUARE]]
102
103
; CHECK-NEXT: [[TMP2:%.*]] = fmul fast float [[TMP1]], [[TMP1]]
103
104
; CHECK-NEXT: [[TMP3:%.*]] = fmul fast float [[TMP2]], [[TMP2]]
104
105
; CHECK-NEXT: [[TMP4:%.*]] = fmul fast float [[TMP3]], [[TMP3]]
105
- ; CHECK-NEXT: [[TMP5:%.*]] = fmul fast float [[TMP4]], [[TMP4]]
106
- ; CHECK-NEXT: ret float [[TMP5]]
106
+ ; CHECK-NEXT: ret float [[TMP4]]
107
107
;
108
108
%1 = call fast float @llvm.pow.f32 (float %x , float 3 .200000e+01 )
109
109
ret float %1
@@ -112,7 +112,7 @@ define float @test_simplify_32(float %x) {
112
112
; pow(x, 33.0)
113
113
define double @test_simplify_33 (double %x ) {
114
114
; CHECK-LABEL: @test_simplify_33(
115
- ; CHECK-NEXT: [[TMP1:%.*]] = call fast double @llvm.pow .f64(double [[X:%.*]], double 3.300000e+01 )
115
+ ; CHECK-NEXT: [[TMP1:%.*]] = call fast double @llvm.powi .f64(double [[X:%.*]], i32 33 )
116
116
; CHECK-NEXT: ret double [[TMP1]]
117
117
;
118
118
%1 = call fast double @llvm.pow.f64 (double %x , double 3 .300000e+01 )
@@ -122,8 +122,8 @@ define double @test_simplify_33(double %x) {
122
122
; pow(x, 16.5) with double
123
123
define double @test_simplify_16_5 (double %x ) {
124
124
; CHECK-LABEL: @test_simplify_16_5(
125
- ; CHECK-NEXT: [[SQRT:%.*]] = call fast double @llvm.sqrt.f64(double [[X]])
126
- ; CHECK-NEXT: [[SQUARE:%.*]] = fmul fast double [[X:%.* ]], [[X]]
125
+ ; CHECK-NEXT: [[SQRT:%.*]] = call fast double @llvm.sqrt.f64(double [[X:%.* ]])
126
+ ; CHECK-NEXT: [[SQUARE:%.*]] = fmul fast double [[X]], [[X]]
127
127
; CHECK-NEXT: [[TMP1:%.*]] = fmul fast double [[SQUARE]], [[SQUARE]]
128
128
; CHECK-NEXT: [[TMP2:%.*]] = fmul fast double [[TMP1]], [[TMP1]]
129
129
; CHECK-NEXT: [[TMP3:%.*]] = fmul fast double [[TMP2]], [[TMP2]]
@@ -137,8 +137,8 @@ define double @test_simplify_16_5(double %x) {
137
137
; pow(x, -16.5) with double
138
138
define double @test_simplify_neg_16_5 (double %x ) {
139
139
; CHECK-LABEL: @test_simplify_neg_16_5(
140
- ; CHECK-NEXT: [[SQRT:%.*]] = call fast double @llvm.sqrt.f64(double [[X]])
141
- ; CHECK-NEXT: [[SQUARE:%.*]] = fmul fast double [[X:%.* ]], [[X]]
140
+ ; CHECK-NEXT: [[SQRT:%.*]] = call fast double @llvm.sqrt.f64(double [[X:%.* ]])
141
+ ; CHECK-NEXT: [[SQUARE:%.*]] = fmul fast double [[X]], [[X]]
142
142
; CHECK-NEXT: [[TMP1:%.*]] = fmul fast double [[SQUARE]], [[SQUARE]]
143
143
; CHECK-NEXT: [[TMP2:%.*]] = fmul fast double [[TMP1]], [[TMP1]]
144
144
; CHECK-NEXT: [[TMP3:%.*]] = fmul fast double [[TMP2]], [[TMP2]]
@@ -214,10 +214,10 @@ define <2 x double> @test_simplify_7_5(<2 x double> %x) {
214
214
define <4 x float > @test_simplify_3_5 (<4 x float > %x ) {
215
215
; CHECK-LABEL: @test_simplify_3_5(
216
216
; CHECK-NEXT: [[SQRT:%.*]] = call fast <4 x float> @llvm.sqrt.v4f32(<4 x float> [[X:%.*]])
217
- ; CHECK-NEXT: [[TMP1 :%.*]] = fmul fast <4 x float> [[X]], [[X]]
218
- ; CHECK-NEXT: [[TMP2 :%.*]] = fmul fast <4 x float> [[TMP1 ]], [[X]]
219
- ; CHECK-NEXT: [[TMP3 :%.*]] = fmul fast <4 x float> [[TMP2 ]], [[SQRT]]
220
- ; CHECK-NEXT: ret <4 x float> [[TMP3 ]]
217
+ ; CHECK-NEXT: [[SQUARE :%.*]] = fmul fast <4 x float> [[X]], [[X]]
218
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fmul fast <4 x float> [[SQUARE ]], [[X]]
219
+ ; CHECK-NEXT: [[TMP2 :%.*]] = fmul fast <4 x float> [[TMP1 ]], [[SQRT]]
220
+ ; CHECK-NEXT: ret <4 x float> [[TMP2 ]]
221
221
;
222
222
%1 = call fast <4 x float > @llvm.pow.v4f32 (<4 x float > %x , <4 x float > <float 3 .500000e+00 , float 3 .500000e+00 , float 3 .500000e+00 , float 3 .500000e+00 >)
223
223
ret <4 x float > %1
0 commit comments