@@ -40,6 +40,33 @@ define double @fast_cabs(double %real, double %imag) {
40
40
ret double %call
41
41
}
42
42
43
+ define double @cabs_zero_real (double %imag ) {
44
+ ; CHECK-LABEL: @cabs_zero_real(
45
+ ; CHECK-NEXT: [[CABS:%.*]] = tail call double @llvm.fabs.f64(double [[IMAG:%.*]])
46
+ ; CHECK-NEXT: ret double [[CABS]]
47
+ ;
48
+ %call = tail call double @cabs (double 0 .0 , double %imag )
49
+ ret double %call
50
+ }
51
+
52
+ define double @fast_cabs_neg_zero_real (double %imag ) {
53
+ ; CHECK-LABEL: @fast_cabs_neg_zero_real(
54
+ ; CHECK-NEXT: [[CABS:%.*]] = tail call fast double @llvm.fabs.f64(double [[IMAG:%.*]])
55
+ ; CHECK-NEXT: ret double [[CABS]]
56
+ ;
57
+ %call = tail call fast double @cabs (double -0 .0 , double %imag )
58
+ ret double %call
59
+ }
60
+
61
+ define double @cabs_zero_imag (double %real ) {
62
+ ; CHECK-LABEL: @cabs_zero_imag(
63
+ ; CHECK-NEXT: [[CABS:%.*]] = tail call double @llvm.fabs.f64(double [[REAL:%.*]])
64
+ ; CHECK-NEXT: ret double [[CABS]]
65
+ ;
66
+ %call = tail call double @cabs (double %real , double 0 .0 )
67
+ ret double %call
68
+ }
69
+
43
70
define float @fast_cabsf (float %real , float %imag ) {
44
71
; CHECK-LABEL: @fast_cabsf(
45
72
; CHECK-NEXT: [[TMP1:%.*]] = fmul fast float [[REAL:%.*]], [[REAL]]
@@ -52,6 +79,33 @@ define float @fast_cabsf(float %real, float %imag) {
52
79
ret float %call
53
80
}
54
81
82
+ define float @cabsf_zero_real (float %imag ) {
83
+ ; CHECK-LABEL: @cabsf_zero_real(
84
+ ; CHECK-NEXT: [[CABS:%.*]] = tail call float @llvm.fabs.f32(float [[IMAG:%.*]])
85
+ ; CHECK-NEXT: ret float [[CABS]]
86
+ ;
87
+ %call = tail call float @cabsf (float 0 .0 , float %imag )
88
+ ret float %call
89
+ }
90
+
91
+ define float @fast_cabsf_neg_zero_real (float %imag ) {
92
+ ; CHECK-LABEL: @fast_cabsf_neg_zero_real(
93
+ ; CHECK-NEXT: [[CABS:%.*]] = tail call fast float @llvm.fabs.f32(float [[IMAG:%.*]])
94
+ ; CHECK-NEXT: ret float [[CABS]]
95
+ ;
96
+ %call = tail call fast float @cabsf (float -0 .0 , float %imag )
97
+ ret float %call
98
+ }
99
+
100
+ define float @cabsf_zero_imag (float %real ) {
101
+ ; CHECK-LABEL: @cabsf_zero_imag(
102
+ ; CHECK-NEXT: [[CABS:%.*]] = tail call float @llvm.fabs.f32(float [[REAL:%.*]])
103
+ ; CHECK-NEXT: ret float [[CABS]]
104
+ ;
105
+ %call = tail call float @cabsf (float %real , float 0 .0 )
106
+ ret float %call
107
+ }
108
+
55
109
define fp128 @fast_cabsl (fp128 %real , fp128 %imag ) {
56
110
; CHECK-LABEL: @fast_cabsl(
57
111
; CHECK-NEXT: [[TMP1:%.*]] = fmul fast fp128 [[REAL:%.*]], [[REAL]]
@@ -64,6 +118,33 @@ define fp128 @fast_cabsl(fp128 %real, fp128 %imag) {
64
118
ret fp128 %call
65
119
}
66
120
121
+ define fp128 @cabsl_zero_real (fp128 %imag ) {
122
+ ; CHECK-LABEL: @cabsl_zero_real(
123
+ ; CHECK-NEXT: [[CABS:%.*]] = tail call fp128 @llvm.fabs.f128(fp128 [[IMAG:%.*]])
124
+ ; CHECK-NEXT: ret fp128 [[CABS]]
125
+ ;
126
+ %call = tail call fp128 @cabsl (fp128 0xL00000000000000000000000000000000, fp128 %imag )
127
+ ret fp128 %call
128
+ }
129
+
130
+ define fp128 @cabsl_zero_imag (fp128 %real ) {
131
+ ; CHECK-LABEL: @cabsl_zero_imag(
132
+ ; CHECK-NEXT: [[CABS:%.*]] = tail call fp128 @llvm.fabs.f128(fp128 [[REAL:%.*]])
133
+ ; CHECK-NEXT: ret fp128 [[CABS]]
134
+ ;
135
+ %call = tail call fp128 @cabsl (fp128 %real , fp128 0xL00000000000000000000000000000000)
136
+ ret fp128 %call
137
+ }
138
+
139
+ define fp128 @fast_cabsl_neg_zero_imag (fp128 %real ) {
140
+ ; CHECK-LABEL: @fast_cabsl_neg_zero_imag(
141
+ ; CHECK-NEXT: [[CABS:%.*]] = tail call fast fp128 @llvm.fabs.f128(fp128 [[REAL:%.*]])
142
+ ; CHECK-NEXT: ret fp128 [[CABS]]
143
+ ;
144
+ %call = tail call fast fp128 @cabsl (fp128 %real , fp128 0xL00000000000000008000000000000000)
145
+ ret fp128 %call
146
+ }
147
+
67
148
declare double @cabs (double %real , double %imag )
68
149
declare float @cabsf (float %real , float %imag )
69
150
declare fp128 @cabsl (fp128 %real , fp128 %imag )
0 commit comments