1
1
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2
- // RUN: %clang_cc1 -triple x86_64-unknown-unknown -ffp-exception-behavior=maytrap -emit-llvm -o - %s | FileCheck %s
2
+ // RUN: %clang_cc1 -triple x86_64-unknown-unknown -ffp-exception-behavior=maytrap -emit-llvm -o - %s | FileCheck --implicit-check-not=fpexcept.maytrap --implicit-check-not=round.tonearest %s
3
3
4
4
5
5
// Test that the constrained intrinsics are picking up the exception
6
6
// metadata from the AST instead of the global default from the command line.
7
7
// Include rounding metadata in the testing.
8
- // FIXME: All cases of "fpexcept.maytrap" in this test are wrong .
9
- // FIXME: All cases of "round.tonearest" in this test are wrong .
8
+ // Any cases of "fpexcept.maytrap" in this test are clang bugs .
9
+ // Any cases of "round.tonearest" in this test are clang bugs .
10
10
11
11
#pragma float_control(except, on)
12
12
#pragma STDC FENV_ROUND FE_UPWARD
@@ -15,7 +15,7 @@ _Complex double g1, g2;
15
15
_Complex float cf ;
16
16
double D ;
17
17
18
- // CHECK-LABEL: define {{[^@]+}} @test3a(
18
+ // CHECK-LABEL: @test3a(
19
19
// CHECK-NEXT: entry:
20
20
// CHECK-NEXT: [[TMP0:%.*]] = load double, ptr @D, align 8
21
21
// CHECK-NEXT: [[CF_REAL:%.*]] = load float, ptr @cf, align 4
@@ -33,7 +33,7 @@ void test3a(void) {
33
33
cf += D ;
34
34
}
35
35
36
- // CHECK-LABEL: define {{[^@]+}} @test3b(
36
+ // CHECK-LABEL: @test3b(
37
37
// CHECK-NEXT: entry:
38
38
// CHECK-NEXT: [[CF_REAL:%.*]] = load float, ptr @cf, align 4
39
39
// CHECK-NEXT: [[CF_IMAG:%.*]] = load float, ptr getelementptr inbounds ({ float, float }, ptr @cf, i32 0, i32 1), align 4
@@ -48,7 +48,7 @@ void test3b(void) {
48
48
D += cf ;
49
49
}
50
50
51
- // CHECK-LABEL: define {{[^@]+}} @test3c(
51
+ // CHECK-LABEL: @test3c(
52
52
// CHECK-NEXT: entry:
53
53
// CHECK-NEXT: [[G1_REAL:%.*]] = load double, ptr @g1, align 8
54
54
// CHECK-NEXT: [[G1_IMAG:%.*]] = load double, ptr getelementptr inbounds ({ double, double }, ptr @g1, i32 0, i32 1), align 8
@@ -69,12 +69,12 @@ void test3c(void) {
69
69
cf /= g1 ;
70
70
}
71
71
72
- // CHECK-LABEL: define {{[^@]+}} @test3d(
72
+ // CHECK-LABEL: @test3d(
73
73
// CHECK-NEXT: entry:
74
74
// CHECK-NEXT: [[G1_REAL:%.*]] = load double, ptr @g1, align 8
75
75
// CHECK-NEXT: [[G1_IMAG:%.*]] = load double, ptr getelementptr inbounds ({ double, double }, ptr @g1, i32 0, i32 1), align 8
76
76
// 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.tonearest ", metadata !"fpexcept.maytrap ") #[[ATTR2]]
77
+ // CHECK-NEXT: [[ADD_R:%.*]] = call double @llvm.experimental.constrained.fadd.f64(double [[G1_REAL]], double [[TMP0]], metadata !"round.upward ", metadata !"fpexcept.strict ") #[[ATTR2]]
78
78
// CHECK-NEXT: store double [[ADD_R]], ptr @g1, align 8
79
79
// CHECK-NEXT: store double [[G1_IMAG]], ptr getelementptr inbounds ({ double, double }, ptr @g1, i32 0, i32 1), align 8
80
80
// CHECK-NEXT: ret void
@@ -83,12 +83,12 @@ void test3d(void) {
83
83
g1 = g1 + D ;
84
84
}
85
85
86
- // CHECK-LABEL: define {{[^@]+}} @test3e(
86
+ // CHECK-LABEL: @test3e(
87
87
// CHECK-NEXT: entry:
88
88
// CHECK-NEXT: [[TMP0:%.*]] = load double, ptr @D, align 8
89
89
// CHECK-NEXT: [[G1_REAL:%.*]] = load double, ptr @g1, align 8
90
90
// 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.tonearest ", metadata !"fpexcept.maytrap ") #[[ATTR2]]
91
+ // CHECK-NEXT: [[ADD_R:%.*]] = call double @llvm.experimental.constrained.fadd.f64(double [[TMP0]], double [[G1_REAL]], metadata !"round.upward ", metadata !"fpexcept.strict ") #[[ATTR2]]
92
92
// CHECK-NEXT: store double [[ADD_R]], ptr @g1, align 8
93
93
// CHECK-NEXT: store double [[G1_IMAG]], ptr getelementptr inbounds ({ double, double }, ptr @g1, i32 0, i32 1), align 8
94
94
// CHECK-NEXT: ret void
@@ -97,7 +97,7 @@ void test3e(void) {
97
97
g1 = D + g1 ;
98
98
}
99
99
100
- // CHECK-LABEL: define {{[^@]+}} @t1(
100
+ // CHECK-LABEL: @t1(
101
101
// CHECK-NEXT: entry:
102
102
// CHECK-NEXT: [[CONV:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double 4.000000e+00, metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2]]
103
103
// CHECK-NEXT: store float [[CONV]], ptr @cf, align 4
@@ -107,7 +107,7 @@ void t1(void) {
107
107
(__real__ cf ) = 4.0 ;
108
108
}
109
109
110
- // CHECK-LABEL: define {{[^@]+}} @t2(
110
+ // CHECK-LABEL: @t2(
111
111
// CHECK-NEXT: entry:
112
112
// CHECK-NEXT: [[CONV:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double 4.000000e+00, metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2]]
113
113
// CHECK-NEXT: store float [[CONV]], ptr getelementptr inbounds ({ float, float }, ptr @cf, i32 0, i32 1), align 4
@@ -117,7 +117,7 @@ void t2(void) {
117
117
(__imag__ cf ) = 4.0 ;
118
118
}
119
119
120
- // CHECK-LABEL: define {{[^@]+}} @t91(
120
+ // CHECK-LABEL: @t91(
121
121
// CHECK-NEXT: entry:
122
122
// CHECK-NEXT: [[C:%.*]] = alloca [0 x i8], align 1
123
123
// CHECK-NEXT: br i1 false, label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]
@@ -139,7 +139,7 @@ void t91(void) {
139
139
(0 ? 2.0f : (_Complex double ) 2.0f );
140
140
}
141
141
142
- // CHECK-LABEL: define {{[^@]+}} @t92(
142
+ // CHECK-LABEL: @t92(
143
143
// CHECK-NEXT: entry:
144
144
// CHECK-NEXT: [[C:%.*]] = alloca [0 x i8], align 1
145
145
// CHECK-NEXT: br i1 false, label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]
0 commit comments