@@ -19,14 +19,14 @@ double D;
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
22
- // CHECK-NEXT: [[CF_IMAG:%.*]] = load float, ptr getelementptr inbounds ({ float, float }, ptr @cf, i32 0, i32 1), align 4
22
+ // CHECK-NEXT: [[CF_IMAG:%.*]] = load float, ptr getelementptr inbounds nuw ({ float, float }, ptr @cf, i32 0, i32 1), align 4
23
23
// CHECK-NEXT: [[CONV:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_REAL]], metadata !"fpexcept.strict") #[[ATTR2:[0-9]+]]
24
24
// CHECK-NEXT: [[CONV1:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_IMAG]], metadata !"fpexcept.strict") #[[ATTR2]]
25
25
// CHECK-NEXT: [[ADD_R:%.*]] = call double @llvm.experimental.constrained.fadd.f64(double [[CONV]], double [[TMP0]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2]]
26
26
// CHECK-NEXT: [[CONV2:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double [[ADD_R]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2]]
27
27
// CHECK-NEXT: [[CONV3:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double [[CONV1]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2]]
28
28
// CHECK-NEXT: store float [[CONV2]], ptr @cf, align 4
29
- // CHECK-NEXT: store float [[CONV3]], ptr getelementptr inbounds ({ float, float }, ptr @cf, i32 0, i32 1), align 4
29
+ // CHECK-NEXT: store float [[CONV3]], ptr getelementptr inbounds nuw ({ float, float }, ptr @cf, i32 0, i32 1), align 4
30
30
// CHECK-NEXT: ret void
31
31
//
32
32
void test3a (void ) {
@@ -36,7 +36,7 @@ void test3a(void) {
36
36
// CHECK-LABEL: @test3b(
37
37
// CHECK-NEXT: entry:
38
38
// CHECK-NEXT: [[CF_REAL:%.*]] = load float, ptr @cf, align 4
39
- // CHECK-NEXT: [[CF_IMAG:%.*]] = load float, ptr getelementptr inbounds ({ float, float }, ptr @cf, i32 0, i32 1), align 4
39
+ // CHECK-NEXT: [[CF_IMAG:%.*]] = load float, ptr getelementptr inbounds nuw ({ float, float }, ptr @cf, i32 0, i32 1), align 4
40
40
// CHECK-NEXT: [[CONV:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_REAL]], metadata !"fpexcept.strict") #[[ATTR2]]
41
41
// CHECK-NEXT: [[CONV1:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_IMAG]], metadata !"fpexcept.strict") #[[ATTR2]]
42
42
// CHECK-NEXT: [[TMP0:%.*]] = load double, ptr @D, align 8
@@ -51,9 +51,9 @@ void test3b(void) {
51
51
// CHECK-LABEL: @test3c(
52
52
// CHECK-NEXT: entry:
53
53
// CHECK-NEXT: [[G1_REAL:%.*]] = load double, ptr @g1, align 8
54
- // CHECK-NEXT: [[G1_IMAG:%.*]] = load double, ptr getelementptr inbounds ({ double, double }, ptr @g1, i32 0, i32 1), align 8
54
+ // CHECK-NEXT: [[G1_IMAG:%.*]] = load double, ptr getelementptr inbounds nuw ({ double, double }, ptr @g1, i32 0, i32 1), align 8
55
55
// CHECK-NEXT: [[CF_REAL:%.*]] = load float, ptr @cf, align 4
56
- // CHECK-NEXT: [[CF_IMAG:%.*]] = load float, ptr getelementptr inbounds ({ float, float }, ptr @cf, i32 0, i32 1), align 4
56
+ // CHECK-NEXT: [[CF_IMAG:%.*]] = load float, ptr getelementptr inbounds nuw ({ float, float }, ptr @cf, i32 0, i32 1), align 4
57
57
// CHECK-NEXT: [[CONV:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_REAL]], metadata !"fpexcept.strict") #[[ATTR2]]
58
58
// CHECK-NEXT: [[CONV1:%.*]] = call double @llvm.experimental.constrained.fpext.f64.f32(float [[CF_IMAG]], metadata !"fpexcept.strict") #[[ATTR2]]
59
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,7 +62,7 @@ void test3b(void) {
62
62
// CHECK-NEXT: [[CONV2:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double [[TMP0]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2]]
63
63
// CHECK-NEXT: [[CONV3:%.*]] = call float @llvm.experimental.constrained.fptrunc.f32.f64(double [[TMP1]], metadata !"round.upward", metadata !"fpexcept.strict") #[[ATTR2]]
64
64
// CHECK-NEXT: store float [[CONV2]], ptr @cf, align 4
65
- // CHECK-NEXT: store float [[CONV3]], ptr getelementptr inbounds ({ float, float }, ptr @cf, i32 0, i32 1), align 4
65
+ // CHECK-NEXT: store float [[CONV3]], ptr getelementptr inbounds nuw ({ float, float }, ptr @cf, i32 0, i32 1), align 4
66
66
// CHECK-NEXT: ret void
67
67
//
68
68
void test3c (void ) {
@@ -72,11 +72,11 @@ void test3c(void) {
72
72
// CHECK-LABEL: @test3d(
73
73
// CHECK-NEXT: entry:
74
74
// CHECK-NEXT: [[G1_REAL:%.*]] = load double, ptr @g1, align 8
75
- // CHECK-NEXT: [[G1_IMAG:%.*]] = load double, ptr getelementptr inbounds ({ double, double }, ptr @g1, i32 0, i32 1), align 8
75
+ // CHECK-NEXT: [[G1_IMAG:%.*]] = load double, ptr getelementptr inbounds nuw ({ double, double }, ptr @g1, i32 0, i32 1), align 8
76
76
// CHECK-NEXT: [[TMP0:%.*]] = load double, ptr @D, align 8
77
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
- // CHECK-NEXT: store double [[G1_IMAG]], ptr getelementptr inbounds ({ double, double }, ptr @g1, i32 0, i32 1), align 8
79
+ // CHECK-NEXT: store double [[G1_IMAG]], ptr getelementptr inbounds nuw ({ double, double }, ptr @g1, i32 0, i32 1), align 8
80
80
// CHECK-NEXT: ret void
81
81
//
82
82
void test3d (void ) {
@@ -87,10 +87,10 @@ void test3d(void) {
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
- // CHECK-NEXT: [[G1_IMAG:%.*]] = load double, ptr getelementptr inbounds ({ double, double }, ptr @g1, i32 0, i32 1), align 8
90
+ // CHECK-NEXT: [[G1_IMAG:%.*]] = load double, ptr getelementptr inbounds nuw ({ double, double }, ptr @g1, i32 0, i32 1), align 8
91
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
- // CHECK-NEXT: store double [[G1_IMAG]], ptr getelementptr inbounds ({ double, double }, ptr @g1, i32 0, i32 1), align 8
93
+ // CHECK-NEXT: store double [[G1_IMAG]], ptr getelementptr inbounds nuw ({ double, double }, ptr @g1, i32 0, i32 1), align 8
94
94
// CHECK-NEXT: ret void
95
95
//
96
96
void test3e (void ) {
@@ -110,7 +110,7 @@ void t1(void) {
110
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
- // CHECK-NEXT: store float [[CONV]], ptr getelementptr inbounds ({ float, float }, ptr @cf, i32 0, i32 1), align 4
113
+ // CHECK-NEXT: store float [[CONV]], ptr getelementptr inbounds nuw ({ float, float }, ptr @cf, i32 0, i32 1), align 4
114
114
// CHECK-NEXT: ret void
115
115
//
116
116
void t2 (void ) {
0 commit comments