Skip to content

Commit 51d9e6f

Browse files
committed
llvm: Accept new LLVM lifetime format
In llvm/llvm-project#150248 LLVM removed the size parameter from the lifetime format. Tolerate not having that size parameter.
1 parent 2886b36 commit 51d9e6f

File tree

6 files changed

+36
-36
lines changed

6 files changed

+36
-36
lines changed

tests/codegen-llvm/align-byval-alignment-mismatch.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ extern "C" {
5555
pub unsafe fn rust_to_c_increases_alignment(x: Align1) {
5656
// i686-linux: start:
5757
// i686-linux-NEXT: [[ALLOCA:%[0-9a-z]+]] = alloca [48 x i8], align 4
58-
// i686-linux-NEXT: call void @llvm.lifetime.start.p0(i64 48, ptr {{.*}}[[ALLOCA]])
58+
// i686-linux-NEXT: call void @llvm.lifetime.start.p0({{(i64 48, )?}}ptr {{.*}}[[ALLOCA]])
5959
// i686-linux-NEXT: call void @llvm.memcpy.{{.+}}(ptr {{.*}}align 4 {{.*}}[[ALLOCA]], ptr {{.*}}align 1 {{.*}}%x
6060
// i686-linux-NEXT: call void @extern_c_align1({{.+}} [[ALLOCA]])
61-
// i686-linux-NEXT: call void @llvm.lifetime.end.p0(i64 48, ptr {{.*}}[[ALLOCA]])
61+
// i686-linux-NEXT: call void @llvm.lifetime.end.p0({{(i64 48, )?}}ptr {{.*}}[[ALLOCA]])
6262

6363
// x86_64-linux: start:
6464
// x86_64-linux-NEXT: call void @extern_c_align1

tests/codegen-llvm/call-tmps-lifetime.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ use minicore::*;
1616
// CHECK-NEXT: start:
1717
// CHECK-NEXT: [[B:%.*]] = alloca
1818
// CHECK-NEXT: [[A:%.*]] = alloca
19-
// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 4096, ptr [[A]])
19+
// CHECK-NEXT: call void @llvm.lifetime.start.p0({{(i64 4096, )?}}ptr [[A]])
2020
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[A]], ptr align 4 {{.*}}, i32 4096, i1 false)
2121
// CHECK-NEXT: call void %h(ptr {{.*}} [[A]])
22-
// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 4096, ptr [[A]])
23-
// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 4096, ptr [[B]])
22+
// CHECK-NEXT: call void @llvm.lifetime.end.p0({{(i64 4096, )?}}ptr [[A]])
23+
// CHECK-NEXT: call void @llvm.lifetime.start.p0({{(i64 4096, )?}}ptr [[B]])
2424
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[B]], ptr align 4 {{.*}}, i32 4096, i1 false)
2525
// CHECK-NEXT: call void %h(ptr {{.*}} [[B]])
26-
// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 4096, ptr [[B]])
26+
// CHECK-NEXT: call void @llvm.lifetime.end.p0({{(i64 4096, )?}}ptr [[B]])
2727
#[no_mangle]
2828
pub fn const_indirect(h: extern "C" fn([u32; 1024])) {
2929
const C: [u32; 1024] = [0; 1024];
@@ -42,12 +42,12 @@ pub struct Str {
4242
// CHECK-LABEL: define void @immediate_indirect(ptr {{.*}}%s.0, i32 {{.*}}%s.1, ptr {{.*}}%g)
4343
// CHECK-NEXT: start:
4444
// CHECK-NEXT: [[A:%.*]] = alloca
45-
// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 8, ptr [[A]])
45+
// CHECK-NEXT: call void @llvm.lifetime.start.p0({{(i64 8, )?}}ptr [[A]])
4646
// CHECK-NEXT: store ptr %s.0, ptr [[A]]
4747
// CHECK-NEXT: [[B:%.]] = getelementptr inbounds i8, ptr [[A]], i32 4
4848
// CHECK-NEXT: store i32 %s.1, ptr [[B]]
4949
// CHECK-NEXT: call void %g(ptr {{.*}} [[A]])
50-
// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 8, ptr [[A]])
50+
// CHECK-NEXT: call void @llvm.lifetime.end.p0({{(i64 8, )?}}ptr [[A]])
5151
#[no_mangle]
5252
pub fn immediate_indirect(s: Str, g: extern "C" fn(Str)) {
5353
g(s);
@@ -58,10 +58,10 @@ pub fn immediate_indirect(s: Str, g: extern "C" fn(Str)) {
5858
// CHECK-LABEL: define void @align_indirect(ptr{{.*}} align 1{{.*}} %a, ptr{{.*}} %fun)
5959
// CHECK-NEXT: start:
6060
// CHECK-NEXT: [[A:%.*]] = alloca [1024 x i8], align 4
61-
// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 1024, ptr [[A]])
61+
// CHECK-NEXT: call void @llvm.lifetime.start.p0({{(i64 1024, )?}}ptr [[A]])
6262
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[A]], ptr align 1 %a, i32 1024, i1 false)
6363
// CHECK-NEXT: call void %fun(ptr {{.*}} [[A]])
64-
// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 1024, ptr [[A]])
64+
// CHECK-NEXT: call void @llvm.lifetime.end.p0({{(i64 1024, )?}}ptr [[A]])
6565
#[no_mangle]
6666
pub fn align_indirect(a: [u8; 1024], fun: extern "C" fn([u8; 1024])) {
6767
fun(a);

tests/codegen-llvm/intrinsics/transmute-simd.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,10 @@ pub extern "C" fn float_ptr_same_lanes(v: f64x2) -> PtrX2 {
9797
// CHECK-NOT: alloca
9898
// CHECK: %[[TEMP:.+]] = alloca [16 x i8]
9999
// CHECK-NOT: alloca
100-
// CHECK: call void @llvm.lifetime.start.p0(i64 16, ptr %[[TEMP]])
100+
// CHECK: call void @llvm.lifetime.start.p0({{(i64 16, )?}}ptr %[[TEMP]])
101101
// CHECK: store <2 x double> %v, ptr %[[TEMP]]
102102
// CHECK: %[[RET:.+]] = load <2 x ptr>, ptr %[[TEMP]]
103-
// CHECK: call void @llvm.lifetime.end.p0(i64 16, ptr %[[TEMP]])
103+
// CHECK: call void @llvm.lifetime.end.p0({{(i64 16, )?}}ptr %[[TEMP]])
104104
// CHECK: ret <2 x ptr> %[[RET]]
105105
unsafe { transmute(v) }
106106
}
@@ -111,10 +111,10 @@ pub extern "C" fn ptr_float_same_lanes(v: PtrX2) -> f64x2 {
111111
// CHECK-NOT: alloca
112112
// CHECK: %[[TEMP:.+]] = alloca [16 x i8]
113113
// CHECK-NOT: alloca
114-
// CHECK: call void @llvm.lifetime.start.p0(i64 16, ptr %[[TEMP]])
114+
// CHECK: call void @llvm.lifetime.start.p0({{(i64 16, )?}}ptr %[[TEMP]])
115115
// CHECK: store <2 x ptr> %v, ptr %[[TEMP]]
116116
// CHECK: %[[RET:.+]] = load <2 x double>, ptr %[[TEMP]]
117-
// CHECK: call void @llvm.lifetime.end.p0(i64 16, ptr %[[TEMP]])
117+
// CHECK: call void @llvm.lifetime.end.p0({{(i64 16, )?}}ptr %[[TEMP]])
118118
// CHECK: ret <2 x double> %[[RET]]
119119
unsafe { transmute(v) }
120120
}
@@ -125,10 +125,10 @@ pub extern "C" fn int_ptr_same_lanes(v: i64x2) -> PtrX2 {
125125
// CHECK-NOT: alloca
126126
// CHECK: %[[TEMP:.+]] = alloca [16 x i8]
127127
// CHECK-NOT: alloca
128-
// CHECK: call void @llvm.lifetime.start.p0(i64 16, ptr %[[TEMP]])
128+
// CHECK: call void @llvm.lifetime.start.p0({{(i64 16, )?}}ptr %[[TEMP]])
129129
// CHECK: store <2 x i64> %v, ptr %[[TEMP]]
130130
// CHECK: %[[RET:.+]] = load <2 x ptr>, ptr %[[TEMP]]
131-
// CHECK: call void @llvm.lifetime.end.p0(i64 16, ptr %[[TEMP]])
131+
// CHECK: call void @llvm.lifetime.end.p0({{(i64 16, )?}}ptr %[[TEMP]])
132132
// CHECK: ret <2 x ptr> %[[RET]]
133133
unsafe { transmute(v) }
134134
}
@@ -139,10 +139,10 @@ pub extern "C" fn ptr_int_same_lanes(v: PtrX2) -> i64x2 {
139139
// CHECK-NOT: alloca
140140
// CHECK: %[[TEMP:.+]] = alloca [16 x i8]
141141
// CHECK-NOT: alloca
142-
// CHECK: call void @llvm.lifetime.start.p0(i64 16, ptr %[[TEMP]])
142+
// CHECK: call void @llvm.lifetime.start.p0({{(i64 16, )?}}ptr %[[TEMP]])
143143
// CHECK: store <2 x ptr> %v, ptr %[[TEMP]]
144144
// CHECK: %[[RET:.+]] = load <2 x i64>, ptr %[[TEMP]]
145-
// CHECK: call void @llvm.lifetime.end.p0(i64 16, ptr %[[TEMP]])
145+
// CHECK: call void @llvm.lifetime.end.p0({{(i64 16, )?}}ptr %[[TEMP]])
146146
// CHECK: ret <2 x i64> %[[RET]]
147147
unsafe { transmute(v) }
148148
}
@@ -153,10 +153,10 @@ pub extern "C" fn float_ptr_widen(v: f32x4) -> PtrX2 {
153153
// CHECK-NOT: alloca
154154
// CHECK: %[[TEMP:.+]] = alloca [16 x i8]
155155
// CHECK-NOT: alloca
156-
// CHECK: call void @llvm.lifetime.start.p0(i64 16, ptr %[[TEMP]])
156+
// CHECK: call void @llvm.lifetime.start.p0({{(i64 16, )?}}ptr %[[TEMP]])
157157
// CHECK: store <4 x float> %v, ptr %[[TEMP]]
158158
// CHECK: %[[RET:.+]] = load <2 x ptr>, ptr %[[TEMP]]
159-
// CHECK: call void @llvm.lifetime.end.p0(i64 16, ptr %[[TEMP]])
159+
// CHECK: call void @llvm.lifetime.end.p0({{(i64 16, )?}}ptr %[[TEMP]])
160160
// CHECK: ret <2 x ptr> %[[RET]]
161161
unsafe { transmute(v) }
162162
}
@@ -167,10 +167,10 @@ pub extern "C" fn int_ptr_widen(v: i32x4) -> PtrX2 {
167167
// CHECK-NOT: alloca
168168
// CHECK: %[[TEMP:.+]] = alloca [16 x i8]
169169
// CHECK-NOT: alloca
170-
// CHECK: call void @llvm.lifetime.start.p0(i64 16, ptr %[[TEMP]])
170+
// CHECK: call void @llvm.lifetime.start.p0({{(i64 16, )?}}ptr %[[TEMP]])
171171
// CHECK: store <4 x i32> %v, ptr %[[TEMP]]
172172
// CHECK: %[[RET:.+]] = load <2 x ptr>, ptr %[[TEMP]]
173-
// CHECK: call void @llvm.lifetime.end.p0(i64 16, ptr %[[TEMP]])
173+
// CHECK: call void @llvm.lifetime.end.p0({{(i64 16, )?}}ptr %[[TEMP]])
174174
// CHECK: ret <2 x ptr> %[[RET]]
175175
unsafe { transmute(v) }
176176
}

tests/codegen-llvm/intrinsics/transmute.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,12 +192,12 @@ pub unsafe fn check_byte_from_bool(x: bool) -> u8 {
192192
#[no_mangle]
193193
pub unsafe fn check_to_pair(x: u64) -> Option<i32> {
194194
// CHECK: %[[TEMP:.+]] = alloca [8 x i8], align 8
195-
// CHECK: call void @llvm.lifetime.start.p0(i64 8, ptr %[[TEMP]])
195+
// CHECK: call void @llvm.lifetime.start.p0({{(i64 8, )?}}ptr %[[TEMP]])
196196
// CHECK: store i64 %x, ptr %[[TEMP]], align 8
197197
// CHECK: %[[PAIR0:.+]] = load i32, ptr %[[TEMP]], align 8
198198
// CHECK: %[[PAIR1P:.+]] = getelementptr inbounds i8, ptr %[[TEMP]], i64 4
199199
// CHECK: %[[PAIR1:.+]] = load i32, ptr %[[PAIR1P]], align 4
200-
// CHECK: call void @llvm.lifetime.end.p0(i64 8, ptr %[[TEMP]])
200+
// CHECK: call void @llvm.lifetime.end.p0({{(i64 8, )?}}ptr %[[TEMP]])
201201
// CHECK: insertvalue {{.+}}, i32 %[[PAIR0]], 0
202202
// CHECK: insertvalue {{.+}}, i32 %[[PAIR1]], 1
203203
transmute(x)
@@ -207,12 +207,12 @@ pub unsafe fn check_to_pair(x: u64) -> Option<i32> {
207207
#[no_mangle]
208208
pub unsafe fn check_from_pair(x: Option<i32>) -> u64 {
209209
// CHECK: %[[TEMP:.+]] = alloca [8 x i8], align 8
210-
// CHECK: call void @llvm.lifetime.start.p0(i64 8, ptr %[[TEMP]])
210+
// CHECK: call void @llvm.lifetime.start.p0({{(i64 8, )?}}ptr %[[TEMP]])
211211
// CHECK: store i32 %x.0, ptr %[[TEMP]], align 8
212212
// CHECK: %[[PAIR1P:.+]] = getelementptr inbounds i8, ptr %[[TEMP]], i64 4
213213
// CHECK: store i32 %x.1, ptr %[[PAIR1P]], align 4
214214
// CHECK: %[[R:.+]] = load i64, ptr %[[TEMP]], align 8
215-
// CHECK: call void @llvm.lifetime.end.p0(i64 8, ptr %[[TEMP]])
215+
// CHECK: call void @llvm.lifetime.end.p0({{(i64 8, )?}}ptr %[[TEMP]])
216216
// CHECK: ret i64 %[[R]]
217217
transmute(x)
218218
}

tests/codegen-llvm/lifetime_start_end.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,27 @@ pub fn test() {
88
let a = 0u8;
99
&a; // keep variable in an alloca
1010

11-
// CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, ptr %a)
11+
// CHECK: call void @llvm.lifetime.start{{.*}}({{(i[0-9 ]+, )?}}ptr %a)
1212

1313
{
1414
let b = &Some(a);
1515
&b; // keep variable in an alloca
1616

17-
// CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, {{.*}})
17+
// CHECK: call void @llvm.lifetime.start{{.*}}({{(i[0-9 ]+, )?}}{{.*}})
1818

19-
// CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, {{.*}})
19+
// CHECK: call void @llvm.lifetime.start{{.*}}({{(i[0-9 ]+, )?}}{{.*}})
2020

21-
// CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, {{.*}})
21+
// CHECK: call void @llvm.lifetime.end{{.*}}({{(i[0-9 ]+, )?}} {{.*}})
2222

23-
// CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, {{.*}})
23+
// CHECK: call void @llvm.lifetime.end{{.*}}({{(i[0-9 ]+, )?}} {{.*}})
2424
}
2525

2626
let c = 1u8;
2727
&c; // keep variable in an alloca
2828

29-
// CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, ptr %c)
29+
// CHECK: call void @llvm.lifetime.start{{.*}}({{(i[0-9 ]+, )?}}ptr %c)
3030

31-
// CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, ptr %c)
31+
// CHECK: call void @llvm.lifetime.end{{.*}}({{(i[0-9 ]+, )?}} ptr %c)
3232

33-
// CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, ptr %a)
33+
// CHECK: call void @llvm.lifetime.end{{.*}}({{(i[0-9 ]+, )?}} ptr %a)
3434
}

tests/codegen-llvm/uninhabited-transparent-return-abi.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ extern "Rust" {
2323
#[no_mangle]
2424
pub fn test_uninhabited_ret_by_ref() {
2525
// CHECK: %_1 = alloca [24 x i8], align {{8|4}}
26-
// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %_1)
26+
// CHECK-NEXT: call void @llvm.lifetime.start.p0({{(i64 24, )?}}ptr nonnull %_1)
2727
// CHECK-NEXT: call void @opaque({{.*}} sret([24 x i8]) {{.*}} %_1) #2
2828
// CHECK-NEXT: unreachable
2929
unsafe {
@@ -35,7 +35,7 @@ pub fn test_uninhabited_ret_by_ref() {
3535
#[no_mangle]
3636
pub fn test_uninhabited_ret_by_ref_with_arg(rsi: u32) {
3737
// CHECK: %_2 = alloca [24 x i8], align {{8|4}}
38-
// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %_2)
38+
// CHECK-NEXT: call void @llvm.lifetime.start.p0({{(i64 24, )?}}ptr nonnull %_2)
3939
// CHECK-NEXT: call void @opaque_with_arg({{.*}} sret([24 x i8]) {{.*}} %_2, i32 noundef %rsi) #2
4040
// CHECK-NEXT: unreachable
4141
unsafe {

0 commit comments

Comments
 (0)