@@ -17,16 +17,18 @@ double D;
17
17
18
18
// CHECK-LABEL: @test3a(
19
19
// CHECK-NEXT: entry:
20
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 2) #[[ATTR3:[0-9]+]]
20
21
// CHECK-NEXT: [[TMP0:%.*]] = load double, ptr @D, align 8
21
22
// CHECK-NEXT: [[CF_REAL:%.*]] = load float, ptr @cf, align 4
22
23
// CHECK-NEXT: [[CF_IMAG:%.*]] = load float, ptr getelementptr inbounds ({ float, float }, ptr @cf, i32 0, i32 1), align 4
23
- // CHECK-NEXT: [[CONV:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_REAL]], metadata !"fpexcept.strict") #[[ATTR2:[0-9]+ ]]
24
- // CHECK-NEXT: [[CONV1:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_IMAG]], metadata !"fpexcept.strict") #[[ATTR2 ]]
25
- // CHECK-NEXT: [[ADD_R:%.*]] = call double @llvm.experimental.constrained.fadd.f64(double [[CONV]], double [[TMP0]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2 ]]
26
- // CHECK-NEXT: [[CONV2:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double [[ADD_R]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2 ]]
27
- // CHECK-NEXT: [[CONV3:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double [[CONV1]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2 ]]
24
+ // CHECK-NEXT: [[CONV:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_REAL]], metadata !"fpexcept.strict") #[[ATTR3 ]]
25
+ // CHECK-NEXT: [[CONV1:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_IMAG]], metadata !"fpexcept.strict") #[[ATTR3 ]]
26
+ // CHECK-NEXT: [[ADD_R:%.*]] = call double @llvm.experimental.constrained.fadd.f64(double [[CONV]], double [[TMP0]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR3 ]]
27
+ // CHECK-NEXT: [[CONV2:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double [[ADD_R]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR3 ]]
28
+ // CHECK-NEXT: [[CONV3:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double [[CONV1]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR3 ]]
28
29
// CHECK-NEXT: store float [[CONV2]], ptr @cf, align 4
29
30
// CHECK-NEXT: store float [[CONV3]], ptr getelementptr inbounds ({ float, float }, ptr @cf, i32 0, i32 1), align 4
31
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 1) #[[ATTR3]]
30
32
// CHECK-NEXT: ret void
31
33
//
32
34
void test3a (void ) {
@@ -35,13 +37,15 @@ void test3a(void) {
35
37
36
38
// CHECK-LABEL: @test3b(
37
39
// CHECK-NEXT: entry:
40
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 2) #[[ATTR3]]
38
41
// CHECK-NEXT: [[CF_REAL:%.*]] = load float, ptr @cf, align 4
39
42
// CHECK-NEXT: [[CF_IMAG:%.*]] = load float, ptr getelementptr inbounds ({ float, float }, ptr @cf, i32 0, i32 1), align 4
40
- // CHECK-NEXT: [[CONV:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_REAL]], metadata !"fpexcept.strict") #[[ATTR2 ]]
41
- // CHECK-NEXT: [[CONV1:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_IMAG]], metadata !"fpexcept.strict") #[[ATTR2 ]]
43
+ // CHECK-NEXT: [[CONV:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_REAL]], metadata !"fpexcept.strict") #[[ATTR3 ]]
44
+ // CHECK-NEXT: [[CONV1:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_IMAG]], metadata !"fpexcept.strict") #[[ATTR3 ]]
42
45
// CHECK-NEXT: [[TMP0:%.*]] = load double, ptr @D, align 8
43
- // CHECK-NEXT: [[ADD_R:%.*]] = call double @llvm.experimental.constrained.fadd.f64(double [[TMP0]], double [[CONV]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2 ]]
46
+ // CHECK-NEXT: [[ADD_R:%.*]] = call double @llvm.experimental.constrained.fadd.f64(double [[TMP0]], double [[CONV]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR3 ]]
44
47
// CHECK-NEXT: store double [[ADD_R]], ptr @D, align 8
48
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 1) #[[ATTR3]]
45
49
// CHECK-NEXT: ret void
46
50
//
47
51
void test3b (void ) {
@@ -50,19 +54,21 @@ void test3b(void) {
50
54
51
55
// CHECK-LABEL: @test3c(
52
56
// CHECK-NEXT: entry:
57
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 2) #[[ATTR3]]
53
58
// CHECK-NEXT: [[G1_REAL:%.*]] = load double, ptr @g1, align 8
54
59
// CHECK-NEXT: [[G1_IMAG:%.*]] = load double, ptr getelementptr inbounds ({ double, double }, ptr @g1, i32 0, i32 1), align 8
55
60
// CHECK-NEXT: [[CF_REAL:%.*]] = load float, ptr @cf, align 4
56
61
// CHECK-NEXT: [[CF_IMAG:%.*]] = load float, ptr getelementptr inbounds ({ float, float }, ptr @cf, i32 0, i32 1), align 4
57
- // CHECK-NEXT: [[CONV:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_REAL]], metadata !"fpexcept.strict") #[[ATTR2 ]]
58
- // CHECK-NEXT: [[CONV1:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_IMAG]], metadata !"fpexcept.strict") #[[ATTR2 ]]
59
- // CHECK-NEXT: [[CALL:%.*]] = call { double, double } @__divdc3(double noundef [[CONV]], double noundef [[CONV1]], double noundef [[G1_REAL]], double noundef [[G1_IMAG]]) #[[ATTR3 :[0-9]+]]
62
+ // CHECK-NEXT: [[CONV:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_REAL]], metadata !"fpexcept.strict") #[[ATTR3 ]]
63
+ // CHECK-NEXT: [[CONV1:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_IMAG]], metadata !"fpexcept.strict") #[[ATTR3 ]]
64
+ // CHECK-NEXT: [[CALL:%.*]] = call { double, double } @__divdc3(double noundef [[CONV]], double noundef [[CONV1]], double noundef [[G1_REAL]], double noundef [[G1_IMAG]]) #[[ATTR4 :[0-9]+]]
60
65
// CHECK-NEXT: [[TMP0:%.*]] = extractvalue { double, double } [[CALL]], 0
61
66
// CHECK-NEXT: [[TMP1:%.*]] = extractvalue { double, double } [[CALL]], 1
62
- // CHECK-NEXT: [[CONV2:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double [[TMP0]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2 ]]
63
- // CHECK-NEXT: [[CONV3:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double [[TMP1]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2 ]]
67
+ // CHECK-NEXT: [[CONV2:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double [[TMP0]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR3 ]]
68
+ // CHECK-NEXT: [[CONV3:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double [[TMP1]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR3 ]]
64
69
// CHECK-NEXT: store float [[CONV2]], ptr @cf, align 4
65
70
// CHECK-NEXT: store float [[CONV3]], ptr getelementptr inbounds ({ float, float }, ptr @cf, i32 0, i32 1), align 4
71
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 1) #[[ATTR3]]
66
72
// CHECK-NEXT: ret void
67
73
//
68
74
void test3c (void ) {
@@ -71,12 +77,14 @@ void test3c(void) {
71
77
72
78
// CHECK-LABEL: @test3d(
73
79
// CHECK-NEXT: entry:
80
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 2) #[[ATTR3]]
74
81
// CHECK-NEXT: [[G1_REAL:%.*]] = load double, ptr @g1, align 8
75
82
// CHECK-NEXT: [[G1_IMAG:%.*]] = load double, ptr getelementptr inbounds ({ double, double }, ptr @g1, i32 0, i32 1), align 8
76
83
// CHECK-NEXT: [[TMP0:%.*]] = load double, ptr @D, align 8
77
- // CHECK-NEXT: [[ADD_R:%.*]] = call double @llvm.experimental.constrained.fadd.f64(double [[G1_REAL]], double [[TMP0]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2 ]]
84
+ // CHECK-NEXT: [[ADD_R:%.*]] = call double @llvm.experimental.constrained.fadd.f64(double [[G1_REAL]], double [[TMP0]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR3 ]]
78
85
// CHECK-NEXT: store double [[ADD_R]], ptr @g1, align 8
79
86
// CHECK-NEXT: store double [[G1_IMAG]], ptr getelementptr inbounds ({ double, double }, ptr @g1, i32 0, i32 1), align 8
87
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 1) #[[ATTR3]]
80
88
// CHECK-NEXT: ret void
81
89
//
82
90
void test3d (void ) {
@@ -85,12 +93,14 @@ void test3d(void) {
85
93
86
94
// CHECK-LABEL: @test3e(
87
95
// CHECK-NEXT: entry:
96
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 2) #[[ATTR3]]
88
97
// CHECK-NEXT: [[TMP0:%.*]] = load double, ptr @D, align 8
89
98
// CHECK-NEXT: [[G1_REAL:%.*]] = load double, ptr @g1, align 8
90
99
// CHECK-NEXT: [[G1_IMAG:%.*]] = load double, ptr getelementptr inbounds ({ double, double }, ptr @g1, i32 0, i32 1), align 8
91
- // CHECK-NEXT: [[ADD_R:%.*]] = call double @llvm.experimental.constrained.fadd.f64(double [[TMP0]], double [[G1_REAL]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2 ]]
100
+ // CHECK-NEXT: [[ADD_R:%.*]] = call double @llvm.experimental.constrained.fadd.f64(double [[TMP0]], double [[G1_REAL]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR3 ]]
92
101
// CHECK-NEXT: store double [[ADD_R]], ptr @g1, align 8
93
102
// CHECK-NEXT: store double [[G1_IMAG]], ptr getelementptr inbounds ({ double, double }, ptr @g1, i32 0, i32 1), align 8
103
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 1) #[[ATTR3]]
94
104
// CHECK-NEXT: ret void
95
105
//
96
106
void test3e (void ) {
@@ -99,8 +109,10 @@ void test3e(void) {
99
109
100
110
// CHECK-LABEL: @t1(
101
111
// CHECK-NEXT: entry:
102
- // CHECK-NEXT: [[CONV:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double 4.000000e+00, metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2]]
112
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 2) #[[ATTR3]]
113
+ // CHECK-NEXT: [[CONV:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double 4.000000e+00, metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR3]]
103
114
// CHECK-NEXT: store float [[CONV]], ptr @cf, align 4
115
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 1) #[[ATTR3]]
104
116
// CHECK-NEXT: ret void
105
117
//
106
118
void t1 (void ) {
@@ -109,8 +121,10 @@ void t1(void) {
109
121
110
122
// CHECK-LABEL: @t2(
111
123
// CHECK-NEXT: entry:
112
- // CHECK-NEXT: [[CONV:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double 4.000000e+00, metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2]]
124
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 2) #[[ATTR3]]
125
+ // CHECK-NEXT: [[CONV:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double 4.000000e+00, metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR3]]
113
126
// CHECK-NEXT: store float [[CONV]], ptr getelementptr inbounds ({ float, float }, ptr @cf, i32 0, i32 1), align 4
127
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 1) #[[ATTR3]]
114
128
// CHECK-NEXT: ret void
115
129
//
116
130
void t2 (void ) {
@@ -120,16 +134,18 @@ void t2(void) {
120
134
// CHECK-LABEL: @t91(
121
135
// CHECK-NEXT: entry:
122
136
// CHECK-NEXT: [[C:%.*]] = alloca [0 x i8], align 1
137
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 2) #[[ATTR3]]
123
138
// CHECK-NEXT: br i1 false, label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]
124
139
// CHECK: cond.true:
125
- // CHECK-NEXT: [[CONV:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float 2.000000e+00, metadata !"fpexcept.strict") #[[ATTR2 ]]
140
+ // CHECK-NEXT: [[CONV:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float 2.000000e+00, metadata !"fpexcept.strict") #[[ATTR3 ]]
126
141
// CHECK-NEXT: br label [[COND_END:%.*]]
127
142
// CHECK: cond.false:
128
- // CHECK-NEXT: [[CONV1:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float 2.000000e+00, metadata !"fpexcept.strict") #[[ATTR2 ]]
143
+ // CHECK-NEXT: [[CONV1:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float 2.000000e+00, metadata !"fpexcept.strict") #[[ATTR3 ]]
129
144
// CHECK-NEXT: br label [[COND_END]]
130
145
// CHECK: cond.end:
131
146
// CHECK-NEXT: [[COND_R:%.*]] = phi double [ [[CONV]], [[COND_TRUE]] ], [ [[CONV1]], [[COND_FALSE]] ]
132
147
// CHECK-NEXT: [[COND_I:%.*]] = phi double [ 0.000000e+00, [[COND_TRUE]] ], [ 0.000000e+00, [[COND_FALSE]] ]
148
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 1) #[[ATTR3]]
133
149
// CHECK-NEXT: ret void
134
150
//
135
151
void t91 (void ) {
@@ -142,16 +158,18 @@ void t91(void) {
142
158
// CHECK-LABEL: @t92(
143
159
// CHECK-NEXT: entry:
144
160
// CHECK-NEXT: [[C:%.*]] = alloca [0 x i8], align 1
161
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 2) #[[ATTR3]]
145
162
// CHECK-NEXT: br i1 false, label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]
146
163
// CHECK: cond.true:
147
- // CHECK-NEXT: [[CONV:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float 2.000000e+00, metadata !"fpexcept.strict") #[[ATTR2 ]]
164
+ // CHECK-NEXT: [[CONV:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float 2.000000e+00, metadata !"fpexcept.strict") #[[ATTR3 ]]
148
165
// CHECK-NEXT: br label [[COND_END:%.*]]
149
166
// CHECK: cond.false:
150
- // CHECK-NEXT: [[CONV1:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float 2.000000e+00, metadata !"fpexcept.strict") #[[ATTR2 ]]
167
+ // CHECK-NEXT: [[CONV1:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float 2.000000e+00, metadata !"fpexcept.strict") #[[ATTR3 ]]
151
168
// CHECK-NEXT: br label [[COND_END]]
152
169
// CHECK: cond.end:
153
170
// CHECK-NEXT: [[COND_R:%.*]] = phi double [ [[CONV]], [[COND_TRUE]] ], [ [[CONV1]], [[COND_FALSE]] ]
154
171
// CHECK-NEXT: [[COND_I:%.*]] = phi double [ 0.000000e+00, [[COND_TRUE]] ], [ 0.000000e+00, [[COND_FALSE]] ]
172
+ // CHECK-NEXT: call void @llvm.set.rounding(i32 1) #[[ATTR3]]
155
173
// CHECK-NEXT: ret void
156
174
//
157
175
void t92 (void ) {
0 commit comments