rust
rust copied to clipboard
Less generic code for Vec allocations
Follow up to https://github.com/rust-lang/rust/pull/120504#issuecomment-1989826191 which hopefully makes compilation faster.
r? @joboet
rustbot has assigned @joboet. They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.
Use r? to explicitly pick a reviewer
@bors try @rust-timer queue
Awaiting bors try build completion.
@rustbot label: +S-waiting-on-perf
:hourglass: Trying commit 870d3326bea4c75bc393daca27fc44bc1e1e4031 with merge 5af33816ce489bad2f393d82636f8c65bd99ba55...
:sunny: Try build successful - checks-actions
Build commit: 5af33816ce489bad2f393d82636f8c65bd99ba55 (5af33816ce489bad2f393d82636f8c65bd99ba55
)
Queued 5af33816ce489bad2f393d82636f8c65bd99ba55 with parent 7de1a1f6db26cf7af43cca74819118428e6317ee, future comparison URL. There are currently 5 preceding artifacts in the queue. It will probably take at least ~7.0 hours until the benchmark run finishes.
Finished benchmarking commit (5af33816ce489bad2f393d82636f8c65bd99ba55): comparison URL.
Overall result: ✅ improvements - no action needed
Benchmarking this pull request likely means that it is perf-sensitive, so we're automatically marking it as not fit for rolling up. While you can manually mark this PR as fit for rollup, we strongly recommend not doing so since this PR may lead to changes in compiler perf.
@bors rollup=never @rustbot label: -S-waiting-on-perf -perf-regression
Instruction count
This is a highly reliable metric that was used to determine the overall result at the top of this comment.
mean | range | count | |
---|---|---|---|
Regressions ❌ (primary) |
- | - | 0 |
Regressions ❌ (secondary) |
- | - | 0 |
Improvements ✅ (primary) |
-0.7% | [-1.4%, -0.5%] | 8 |
Improvements ✅ (secondary) |
- | - | 0 |
All ❌✅ (primary) | -0.7% | [-1.4%, -0.5%] | 8 |
Max RSS (memory usage)
Results
This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
mean | range | count | |
---|---|---|---|
Regressions ❌ (primary) |
4.4% | [1.0%, 8.3%] | 7 |
Regressions ❌ (secondary) |
- | - | 0 |
Improvements ✅ (primary) |
-16.7% | [-16.7%, -16.7%] | 1 |
Improvements ✅ (secondary) |
- | - | 0 |
All ❌✅ (primary) | 1.7% | [-16.7%, 8.3%] | 8 |
Cycles
Results
This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
mean | range | count | |
---|---|---|---|
Regressions ❌ (primary) |
- | - | 0 |
Regressions ❌ (secondary) |
- | - | 0 |
Improvements ✅ (primary) |
-1.8% | [-1.8%, -1.8%] | 1 |
Improvements ✅ (secondary) |
- | - | 0 |
All ❌✅ (primary) | -1.8% | [-1.8%, -1.8%] | 1 |
Binary size
Results
This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
mean | range | count | |
---|---|---|---|
Regressions ❌ (primary) |
0.5% | [0.0%, 1.8%] | 7 |
Regressions ❌ (secondary) |
0.0% | [0.0%, 0.0%] | 11 |
Improvements ✅ (primary) |
-0.3% | [-0.9%, -0.0%] | 68 |
Improvements ✅ (secondary) |
-0.3% | [-0.5%, -0.2%] | 7 |
All ❌✅ (primary) | -0.2% | [-0.9%, 1.8%] | 75 |
Bootstrap: 672.776s -> 672.488s (-0.04%) Artifact size: 310.29 MiB -> 310.20 MiB (-0.03%)
@bors try @rust-timer queue
Awaiting bors try build completion.
@rustbot label: +S-waiting-on-perf
:hourglass: Trying commit a7064e1f46df919b64907d6e07e127cc5e88f237 with merge 918ae7196cad2c2d5a80c3d893574ea6493717d3...
:sunny: Try build successful - checks-actions
Build commit: 918ae7196cad2c2d5a80c3d893574ea6493717d3 (918ae7196cad2c2d5a80c3d893574ea6493717d3
)
:sunny: Try build successful - checks-actions
Build commit: 918ae7196cad2c2d5a80c3d893574ea6493717d3 (918ae7196cad2c2d5a80c3d893574ea6493717d3
)
Queued 918ae7196cad2c2d5a80c3d893574ea6493717d3 with parent ee03c286cfdca26fa5b2a4ee40957625d2c826ff, future comparison URL. There are currently 0 preceding artifacts in the queue. It will probably take at least ~1.7 hours until the benchmark run finishes.
Finished benchmarking commit (918ae7196cad2c2d5a80c3d893574ea6493717d3): comparison URL.
Overall result: ❌✅ regressions and improvements - ACTION NEEDED
Benchmarking this pull request likely means that it is perf-sensitive, so we're automatically marking it as not fit for rolling up. While you can manually mark this PR as fit for rollup, we strongly recommend not doing so since this PR may lead to changes in compiler perf.
Next Steps: If you can justify the regressions found in this try perf run, please indicate this with @rustbot label: +perf-regression-triaged
along with sufficient written justification. If you cannot justify the regressions please fix the regressions and do another perf run. If the next run shows neutral or positive results, the label will be automatically removed.
@bors rollup=never @rustbot label: -S-waiting-on-perf +perf-regression
Instruction count
This is a highly reliable metric that was used to determine the overall result at the top of this comment.
mean | range | count | |
---|---|---|---|
Regressions ❌ (primary) |
0.7% | [0.7%, 0.7%] | 2 |
Regressions ❌ (secondary) |
- | - | 0 |
Improvements ✅ (primary) |
-0.7% | [-1.3%, -0.5%] | 6 |
Improvements ✅ (secondary) |
-4.4% | [-4.4%, -4.4%] | 1 |
All ❌✅ (primary) | -0.4% | [-1.3%, 0.7%] | 8 |
Max RSS (memory usage)
Results
This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
mean | range | count | |
---|---|---|---|
Regressions ❌ (primary) |
6.1% | [3.3%, 8.1%] | 5 |
Regressions ❌ (secondary) |
- | - | 0 |
Improvements ✅ (primary) |
-2.7% | [-18.0%, -1.3%] | 39 |
Improvements ✅ (secondary) |
-2.7% | [-4.2%, -0.7%] | 66 |
All ❌✅ (primary) | -1.7% | [-18.0%, 8.1%] | 44 |
Cycles
Results
This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
mean | range | count | |
---|---|---|---|
Regressions ❌ (primary) |
- | - | 0 |
Regressions ❌ (secondary) |
4.1% | [3.5%, 4.6%] | 2 |
Improvements ✅ (primary) |
-1.7% | [-1.7%, -1.6%] | 2 |
Improvements ✅ (secondary) |
-2.6% | [-2.6%, -2.6%] | 1 |
All ❌✅ (primary) | -1.7% | [-1.7%, -1.6%] | 2 |
Binary size
Results
This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
mean | range | count | |
---|---|---|---|
Regressions ❌ (primary) |
0.5% | [0.0%, 1.9%] | 8 |
Regressions ❌ (secondary) |
0.0% | [0.0%, 0.0%] | 11 |
Improvements ✅ (primary) |
-0.3% | [-0.8%, -0.0%] | 67 |
Improvements ✅ (secondary) |
-0.2% | [-0.3%, -0.2%] | 4 |
All ❌✅ (primary) | -0.2% | [-0.8%, 1.9%] | 75 |
Bootstrap: 669.125s -> 667.891s (-0.18%) Artifact size: 311.46 MiB -> 311.42 MiB (-0.01%)
I've rebased and went back to the original version that had a better perf result.
BTW, the previous PR #120504 has made it into the next beta, so this follow-up may need cherry-picking into the beta too.
Yeah, this seems fine to me, I can play around with it later. @bors r+ rollup=never @rustbot label +beta-nominated (as it fixes a performance regression in beta)
:pushpin: Commit 17b7f551f15bd9da3a4e9753d5ab36fcc98d1bd0 has been approved by joboet
It is now in the queue for this repository.
@bors r- @rustbot ready
r=me once CI comes in green.
@bors r=joboet
:pushpin: Commit 533d7d1012c0105172c1d40b2d54d1b35e050aad has been approved by joboet
It is now in the queue for this repository.
:hourglass: Testing commit 533d7d1012c0105172c1d40b2d54d1b35e050aad with merge 8de764912bb6a0617d3d38a23c44e257cff583c9...
The job x86_64-gnu-llvm-17
failed! Check out the build log: (web) (plain)
Click to see the possible cause of the failure (guessed by this bot)
failures:
---- [codegen] tests/codegen/vec-calloc.rs stdout ----
error: verification with 'FileCheck' failed
status: exit status: 1
command: "/usr/lib/llvm-17/bin/FileCheck" "--input-file" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/vec-calloc/vec-calloc.ll" "/checkout/tests/codegen/vec-calloc.rs" "--check-prefix=CHECK" "--check-prefix" "NONMSVC" "--allow-unused-prefixes" "--dump-input-context" "100"
--- stderr -------------------------------
/checkout/tests/codegen/vec-calloc.rs:17:16: error: CHECK-NOT: excluded string found in input
/checkout/tests/codegen/vec-calloc.rs:17:16: error: CHECK-NOT: excluded string found in input
// CHECK-NOT: call {{.*}}reserve
^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/vec-calloc/vec-calloc.ll:30:3: note: found here
; call alloc::raw_vec::handle_reserve_error
/checkout/tests/codegen/vec-calloc.rs:36:16: error: CHECK-NOT: excluded string found in input
/checkout/tests/codegen/vec-calloc.rs:36:16: error: CHECK-NOT: excluded string found in input
// CHECK-NOT: call {{.*}}reserve
^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/vec-calloc/vec-calloc.ll:68:3: note: found here
; call alloc::raw_vec::handle_reserve_error
/checkout/tests/codegen/vec-calloc.rs:53:16: error: CHECK-NOT: excluded string found in input
/checkout/tests/codegen/vec-calloc.rs:53:16: error: CHECK-NOT: excluded string found in input
// CHECK-NOT: call {{.*}}reserve
^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/vec-calloc/vec-calloc.ll:105:3: note: found here
; call alloc::raw_vec::handle_reserve_error
/checkout/tests/codegen/vec-calloc.rs:70:16: error: CHECK-NOT: excluded string found in input
/checkout/tests/codegen/vec-calloc.rs:70:16: error: CHECK-NOT: excluded string found in input
// CHECK-NOT: call {{.*}}reserve
^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/vec-calloc/vec-calloc.ll:190:3: note: found here
; call alloc::raw_vec::handle_reserve_error
/checkout/tests/codegen/vec-calloc.rs:87:16: error: CHECK-NOT: excluded string found in input
/checkout/tests/codegen/vec-calloc.rs:87:16: error: CHECK-NOT: excluded string found in input
// CHECK-NOT: call {{.*}}reserve
^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/vec-calloc/vec-calloc.ll:227:3: note: found here
; call alloc::raw_vec::handle_reserve_error
/checkout/tests/codegen/vec-calloc.rs:104:16: error: CHECK-NOT: excluded string found in input
/checkout/tests/codegen/vec-calloc.rs:104:16: error: CHECK-NOT: excluded string found in input
// CHECK-NOT: call {{.*}}reserve
^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/vec-calloc/vec-calloc.ll:265:3: note: found here
; call alloc::raw_vec::handle_reserve_error
/checkout/tests/codegen/vec-calloc.rs:121:16: error: CHECK-NOT: excluded string found in input
/checkout/tests/codegen/vec-calloc.rs:121:16: error: CHECK-NOT: excluded string found in input
// CHECK-NOT: call {{.*}}reserve
^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/vec-calloc/vec-calloc.ll:303:3: note: found here
; call alloc::raw_vec::handle_reserve_error
/checkout/tests/codegen/vec-calloc.rs:138:16: error: CHECK-NOT: excluded string found in input
/checkout/tests/codegen/vec-calloc.rs:138:16: error: CHECK-NOT: excluded string found in input
// CHECK-NOT: call {{.*}}reserve
^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/vec-calloc/vec-calloc.ll:388:3: note: found here
; call alloc::raw_vec::handle_reserve_error
/checkout/tests/codegen/vec-calloc.rs:155:16: error: CHECK-NOT: excluded string found in input
/checkout/tests/codegen/vec-calloc.rs:155:16: error: CHECK-NOT: excluded string found in input
// CHECK-NOT: call {{.*}}reserve
^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/vec-calloc/vec-calloc.ll:424:3: note: found here
; call alloc::raw_vec::handle_reserve_error
/checkout/tests/codegen/vec-calloc.rs:172:16: error: CHECK-NOT: excluded string found in input
/checkout/tests/codegen/vec-calloc.rs:172:16: error: CHECK-NOT: excluded string found in input
// CHECK-NOT: call {{.*}}reserve
^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/vec-calloc/vec-calloc.ll:462:3: note: found here
; call alloc::raw_vec::handle_reserve_error
Input file: /checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen/vec-calloc/vec-calloc.ll
Check file: /checkout/tests/codegen/vec-calloc.rs
-dump-input=help explains the following input dump.
Input was:
<<<<<<
<<<<<<
1: ; ModuleID = 'vec_calloc.23633b36ce1a1ab2-cgu.0'
2: source_filename = "vec_calloc.23633b36ce1a1ab2-cgu.0"
3: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
4: target triple = "x86_64-unknown-linux-gnu"
5:
6: @__rust_no_alloc_shim_is_unstable = external global i8
7:
8: ; Function Attrs: nonlazybind uwtable
9: define void @vec_zero_bytes(ptr noalias nocapture noundef writeonly sret([24 x i8]) align 8 dereferenceable(24) %_0, i64 noundef %n) unnamed_addr #0 personality ptr @rust_eh_personality {
10: start:
11: tail call void @llvm.experimental.noalias.scope.decl(metadata !3)
12: %0 = icmp eq i64 %n, 0
13: br i1 %0, label %"_ZN63_$LT$u8$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h6983c6b0ed0b450dE.exit", label %bb4.i.i
14:
15: bb4.i.i: ; preds = %start
16: %_4.i.i.i = icmp slt i64 %n, 0
17: br i1 %_4.i.i.i, label %bb8.i, label %bb7.i.i
18:
19: bb7.i.i: ; preds = %bb4.i.i
20: %1 = tail call noundef ptr @__rust_alloc_zeroed(i64 noundef %n, i64 noundef 1) #6, !noalias !6
21: %2 = icmp eq ptr %1, null
22: br i1 %2, label %bb8.i, label %bb14.i.i
23:
24: bb14.i.i: ; preds = %bb7.i.i
25: %3 = ptrtoint ptr %1 to i64
26: br label %"_ZN63_$LT$u8$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h6983c6b0ed0b450dE.exit"
27:
28: bb8.i: ; preds = %bb7.i.i, %bb4.i.i
29: %_10.sroa.4.0.i = phi i64 [ 0, %bb4.i.i ], [ 1, %bb7.i.i ]
30: ; call alloc::raw_vec::handle_reserve_error
not:17 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match expected
31: tail call void @_ZN5alloc7raw_vec20handle_reserve_error17h0eeb388cf1392e03E(i64 noundef %_10.sroa.4.0.i, i64 %n) #7, !noalias !3
32: unreachable
33:
34: "_ZN63_$LT$u8$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h6983c6b0ed0b450dE.exit": ; preds = %start, %bb14.i.i
35: %_10.sroa.10.0.ph.i = phi i64 [ 1, %start ], [ %3, %bb14.i.i ]
36: %4 = inttoptr i64 %_10.sroa.10.0.ph.i to ptr
37: store i64 %n, ptr %_0, align 8, !alias.scope !3
38: %v.sroa.6.0._0.sroa_idx.i = getelementptr inbounds i8, ptr %_0, i64 8
39: store ptr %4, ptr %v.sroa.6.0._0.sroa_idx.i, align 8, !alias.scope !3
40: %v.sroa.8.0._0.sroa_idx.i = getelementptr inbounds i8, ptr %_0, i64 16
41: store i64 %n, ptr %v.sroa.8.0._0.sroa_idx.i, align 8, !alias.scope !3
42: ret void
43: }
44:
45: ; Function Attrs: nonlazybind uwtable
46: define void @vec_one_bytes(ptr noalias nocapture noundef writeonly sret([24 x i8]) align 8 dereferenceable(24) %_0, i64 noundef %n) unnamed_addr #0 personality ptr @rust_eh_personality {
47: start:
48: tail call void @llvm.experimental.noalias.scope.decl(metadata !9)
49: %0 = icmp eq i64 %n, 0
50: br i1 %0, label %"_ZN63_$LT$u8$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h6983c6b0ed0b450dE.exit", label %bb4.i7.i
51:
52: bb4.i7.i: ; preds = %start
53: %_4.i.i8.i = icmp slt i64 %n, 0
54: br i1 %_4.i.i8.i, label %bb11.i, label %bb7.i9.i
55:
56: bb7.i9.i: ; preds = %bb4.i7.i
57: %1 = load volatile i8, ptr @__rust_no_alloc_shim_is_unstable, align 1, !noalias !12
58: %_0.i.i.i.i.i = tail call noundef ptr @__rust_alloc(i64 noundef %n, i64 noundef 1) #6, !noalias !12
59: %2 = icmp eq ptr %_0.i.i.i.i.i, null
60: br i1 %2, label %bb11.i, label %bb12.thread.i
61:
62: bb12.thread.i: ; preds = %bb7.i9.i
63: tail call void @llvm.memset.p0.i64(ptr nonnull align 1 %_0.i.i.i.i.i, i8 1, i64 %n, i1 false), !noalias !9
64: br label %"_ZN63_$LT$u8$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h6983c6b0ed0b450dE.exit"
65:
66: bb11.i: ; preds = %bb7.i9.i, %bb4.i7.i
67: %_15.sroa.4.0.i = phi i64 [ 0, %bb4.i7.i ], [ 1, %bb7.i9.i ]
68: ; call alloc::raw_vec::handle_reserve_error
not:36 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match expected
69: tail call void @_ZN5alloc7raw_vec20handle_reserve_error17h0eeb388cf1392e03E(i64 noundef %_15.sroa.4.0.i, i64 %n) #7, !noalias !9
70: unreachable
71:
72: "_ZN63_$LT$u8$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h6983c6b0ed0b450dE.exit": ; preds = %start, %bb12.thread.i
73: %.sink.i = phi ptr [ %_0.i.i.i.i.i, %bb12.thread.i ], [ inttoptr (i64 1 to ptr), %start ]
74: store i64 %n, ptr %_0, align 8, !alias.scope !9
75: %v.sroa.6.0._0.sroa_idx.i = getelementptr inbounds i8, ptr %_0, i64 8
76: store ptr %.sink.i, ptr %v.sroa.6.0._0.sroa_idx.i, align 8, !alias.scope !9
77: %v.sroa.8.0._0.sroa_idx.i = getelementptr inbounds i8, ptr %_0, i64 16
78: store i64 %n, ptr %v.sroa.8.0._0.sroa_idx.i, align 8, !alias.scope !9
79: ret void
80: }
81:
82: ; Function Attrs: nonlazybind uwtable
83: define void @vec_zero_scalar(ptr noalias nocapture noundef writeonly sret([24 x i8]) align 8 dereferenceable(24) %_0, i64 noundef %n) unnamed_addr #0 personality ptr @rust_eh_personality {
84: start:
85: tail call void @llvm.experimental.noalias.scope.decl(metadata !15)
86: %0 = icmp eq i64 %n, 0
87: br i1 %0, label %"_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h2edc9878c494bc71E.exit", label %bb4.i9.i
88:
89: bb4.i9.i: ; preds = %start
90: %_4.i.i10.i = icmp ugt i64 %n, 2305843009213693951
91: %array_size.i.i11.i = shl nuw i64 %n, 2
92: br i1 %_4.i.i10.i, label %bb14.i, label %bb7.i12.i
93:
94: bb7.i12.i: ; preds = %bb4.i9.i
95: %1 = tail call noundef align 4 ptr @__rust_alloc_zeroed(i64 noundef %array_size.i.i11.i, i64 noundef 4) #6, !noalias !18
96: %2 = icmp eq ptr %1, null
97: br i1 %2, label %bb14.i, label %bb14.i13.i
98:
99: bb14.i13.i: ; preds = %bb7.i12.i
100: %3 = ptrtoint ptr %1 to i64
101: br label %"_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h2edc9878c494bc71E.exit"
102:
103: bb14.i: ; preds = %bb7.i12.i, %bb4.i9.i
104: %_15.sroa.4.0.i = phi i64 [ 0, %bb4.i9.i ], [ 4, %bb7.i12.i ]
105: ; call alloc::raw_vec::handle_reserve_error
not:53 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match expected
106: tail call void @_ZN5alloc7raw_vec20handle_reserve_error17h0eeb388cf1392e03E(i64 noundef %_15.sroa.4.0.i, i64 %array_size.i.i11.i) #7, !noalias !15
107: unreachable
108:
109: "_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h2edc9878c494bc71E.exit": ; preds = %start, %bb14.i13.i
110: %_15.sroa.10.0.ph.i = phi i64 [ 4, %start ], [ %3, %bb14.i13.i ]
111: %4 = inttoptr i64 %_15.sroa.10.0.ph.i to ptr
112: store i64 %n, ptr %_0, align 8, !alias.scope !15
113: %5 = getelementptr inbounds i8, ptr %_0, i64 8
114: store ptr %4, ptr %5, align 8, !alias.scope !15
115: %6 = getelementptr inbounds i8, ptr %_0, i64 16
116: store i64 %n, ptr %6, align 8, !alias.scope !15
117: ret void
118: }
119:
120: ; Function Attrs: nonlazybind uwtable
121: define void @vec_one_scalar(ptr noalias nocapture noundef writeonly sret([24 x i8]) align 8 dereferenceable(24) %_0, i64 noundef %n) unnamed_addr #0 personality ptr @rust_eh_personality {
122: start:
123: tail call void @llvm.experimental.noalias.scope.decl(metadata !21)
124: %0 = icmp eq i64 %n, 0
125: br i1 %0, label %"_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h2edc9878c494bc71E.exit", label %bb4.i.i
126:
127: bb4.i.i: ; preds = %start
128: %_4.i.i.i = icmp ugt i64 %n, 2305843009213693951
129: %array_size.i.i.i = shl nuw i64 %n, 2
130: br i1 %_4.i.i.i, label %bb17.i, label %bb7.i.i
131:
132: bb7.i.i: ; preds = %bb4.i.i
133: %1 = load volatile i8, ptr @__rust_no_alloc_shim_is_unstable, align 1, !noalias !24
134: %_0.i.i.i.i.i = tail call noundef align 4 ptr @__rust_alloc(i64 noundef %array_size.i.i.i, i64 noundef 4) #6, !noalias !24
135: %2 = icmp eq ptr %_0.i.i.i.i.i, null
136: br i1 %2, label %bb17.i, label %"_ZN5alloc3vec16Vec$LT$T$C$A$GT$7reserve17h2d078039e4875b0aE.exit.i.i"
137:
138: "_ZN5alloc3vec16Vec$LT$T$C$A$GT$7reserve17h2d078039e4875b0aE.exit.i.i": ; preds = %bb7.i.i
139: %_2816.i.i = icmp ugt i64 %n, 1
140: br i1 %_2816.i.i, label %bb18.i.i.preheader, label %bb4.i19.i
141:
142: bb18.i.i.preheader: ; preds = %"_ZN5alloc3vec16Vec$LT$T$C$A$GT$7reserve17h2d078039e4875b0aE.exit.i.i"
143: %3 = add i64 %n, -1
144: %min.iters.check = icmp ult i64 %n, 9
145: br i1 %min.iters.check, label %bb18.i.i.preheader4, label %vector.ph
146:
147: vector.ph: ; preds = %bb18.i.i.preheader
148: %n.vec = and i64 %3, -8
149: %4 = shl i64 %n.vec, 2
150: %ind.end = getelementptr i8, ptr %_0.i.i.i.i.i, i64 %4
151: %ind.end1 = or i64 %n.vec, 1
152: br label %vector.body
153:
154: vector.body: ; preds = %vector.body, %vector.ph
155: %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
156: %5 = shl i64 %index, 2
157: %next.gep = getelementptr i8, ptr %_0.i.i.i.i.i, i64 %5
158: store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %next.gep, align 4, !noalias !27
159: %6 = getelementptr i32, ptr %next.gep, i64 4
160: store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %6, align 4, !noalias !27
161: %index.next = add nuw i64 %index, 8
162: %7 = icmp eq i64 %index.next, %n.vec
163: br i1 %7, label %middle.block, label %vector.body, !llvm.loop !30
164:
165: middle.block: ; preds = %vector.body
166: %cmp.n = icmp eq i64 %3, %n.vec
167: br i1 %cmp.n, label %bb4.i19.i, label %bb18.i.i.preheader4
168:
169: bb18.i.i.preheader4: ; preds = %bb18.i.i.preheader, %middle.block
170: %ptr.019.i.i.ph = phi ptr [ %_0.i.i.i.i.i, %bb18.i.i.preheader ], [ %ind.end, %middle.block ]
171: %iter.sroa.0.018.i.i.ph = phi i64 [ 1, %bb18.i.i.preheader ], [ %ind.end1, %middle.block ]
172: br label %bb18.i.i
173:
174: bb4.i19.i: ; preds = %bb18.i.i, %middle.block, %"_ZN5alloc3vec16Vec$LT$T$C$A$GT$7reserve17h2d078039e4875b0aE.exit.i.i"
175: %ptr.0.lcssa.i50.i = phi ptr [ %_0.i.i.i.i.i, %"_ZN5alloc3vec16Vec$LT$T$C$A$GT$7reserve17h2d078039e4875b0aE.exit.i.i" ], [ %ind.end, %middle.block ], [ %_16.i.i, %bb18.i.i ]
176: store i32 1, ptr %ptr.0.lcssa.i50.i, align 4, !noalias !27
177: br label %"_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h2edc9878c494bc71E.exit"
178:
179: bb18.i.i: ; preds = %bb18.i.i.preheader4, %bb18.i.i
180: %ptr.019.i.i = phi ptr [ %_16.i.i, %bb18.i.i ], [ %ptr.019.i.i.ph, %bb18.i.i.preheader4 ]
181: %iter.sroa.0.018.i.i = phi i64 [ %_0.i9.i.i, %bb18.i.i ], [ %iter.sroa.0.018.i.i.ph, %bb18.i.i.preheader4 ]
182: %_0.i9.i.i = add nuw nsw i64 %iter.sroa.0.018.i.i, 1
183: store i32 1, ptr %ptr.019.i.i, align 4, !noalias !27
184: %_16.i.i = getelementptr inbounds i32, ptr %ptr.019.i.i, i64 1
185: %exitcond.not.i.i = icmp eq i64 %_0.i9.i.i, %n
186: br i1 %exitcond.not.i.i, label %bb4.i19.i, label %bb18.i.i, !llvm.loop !33
187:
188: bb17.i: ; preds = %bb7.i.i, %bb4.i.i
189: %_20.sroa.4.0.i = phi i64 [ 0, %bb4.i.i ], [ 4, %bb7.i.i ]
190: ; call alloc::raw_vec::handle_reserve_error
not:70 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match expected
191: tail call void @_ZN5alloc7raw_vec20handle_reserve_error17h0eeb388cf1392e03E(i64 noundef %_20.sroa.4.0.i, i64 %array_size.i.i.i) #7, !noalias !21
192: unreachable
193:
194: "_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h2edc9878c494bc71E.exit": ; preds = %start, %bb4.i19.i
195: %.sink.i = phi ptr [ %_0.i.i.i.i.i, %bb4.i19.i ], [ inttoptr (i64 4 to ptr), %start ]
196: store i64 %n, ptr %_0, align 8, !alias.scope !21
197: %8 = getelementptr inbounds i8, ptr %_0, i64 8
198: store ptr %.sink.i, ptr %8, align 8, !alias.scope !21
199: %9 = getelementptr inbounds i8, ptr %_0, i64 16
200: store i64 %n, ptr %9, align 8, !alias.scope !21
201: ret void
202: }
203:
204: ; Function Attrs: nonlazybind uwtable
205: define void @vec_zero_rgb48(ptr noalias nocapture noundef writeonly sret([24 x i8]) align 8 dereferenceable(24) %_0, i64 noundef %n) unnamed_addr #0 personality ptr @rust_eh_personality {
206: start:
207: tail call void @llvm.experimental.noalias.scope.decl(metadata !34)
208: %0 = icmp eq i64 %n, 0
209: br i1 %0, label %"_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h532cd66e2ae42d41E.exit", label %bb4.i10.i
210:
211: bb4.i10.i: ; preds = %start
212: %_4.i.i11.i = icmp ugt i64 %n, 1537228672809129301
213: %array_size.i.i12.i = mul nuw i64 %n, 6
214: br i1 %_4.i.i11.i, label %bb14.i, label %bb7.i13.i
215:
216: bb7.i13.i: ; preds = %bb4.i10.i
217: %1 = tail call noundef align 2 ptr @__rust_alloc_zeroed(i64 noundef %array_size.i.i12.i, i64 noundef 2) #6, !noalias !37
218: %2 = icmp eq ptr %1, null
219: br i1 %2, label %bb14.i, label %bb14.i14.i
220:
221: bb14.i14.i: ; preds = %bb7.i13.i
222: %3 = ptrtoint ptr %1 to i64
223: br label %"_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h532cd66e2ae42d41E.exit"
224:
225: bb14.i: ; preds = %bb7.i13.i, %bb4.i10.i
226: %_15.sroa.4.0.i = phi i64 [ 0, %bb4.i10.i ], [ 2, %bb7.i13.i ]
227: ; call alloc::raw_vec::handle_reserve_error
not:87 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match expected
228: tail call void @_ZN5alloc7raw_vec20handle_reserve_error17h0eeb388cf1392e03E(i64 noundef %_15.sroa.4.0.i, i64 %array_size.i.i12.i) #7, !noalias !34
229: unreachable
230:
231: "_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h532cd66e2ae42d41E.exit": ; preds = %start, %bb14.i14.i
232: %_15.sroa.10.0.ph.i = phi i64 [ 2, %start ], [ %3, %bb14.i14.i ]
233: %4 = inttoptr i64 %_15.sroa.10.0.ph.i to ptr
234: store i64 %n, ptr %_0, align 8, !alias.scope !34
235: %5 = getelementptr inbounds i8, ptr %_0, i64 8
236: store ptr %4, ptr %5, align 8, !alias.scope !34
237: %6 = getelementptr inbounds i8, ptr %_0, i64 16
238: store i64 %n, ptr %6, align 8, !alias.scope !34
239: ret void
240: }
241:
242: ; Function Attrs: nonlazybind uwtable
243: define void @vec_zero_array_16(ptr noalias nocapture noundef writeonly sret([24 x i8]) align 8 dereferenceable(24) %_0, i64 noundef %n) unnamed_addr #0 personality ptr @rust_eh_personality {
244: bb2.i:
245: tail call void @llvm.experimental.noalias.scope.decl(metadata !40)
246: %0 = icmp eq i64 %n, 0
247: br i1 %0, label %"_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h81d4a1c826168365E.exit", label %bb4.i10.i
248:
249: bb4.i10.i: ; preds = %bb2.i
250: %_4.i.i11.i = icmp ugt i64 %n, 72057594037927935
251: %array_size.i.i12.i = shl nuw i64 %n, 7
252: br i1 %_4.i.i11.i, label %bb14.i, label %bb7.i13.i
253:
254: bb7.i13.i: ; preds = %bb4.i10.i
255: %1 = tail call noundef align 8 ptr @__rust_alloc_zeroed(i64 noundef %array_size.i.i12.i, i64 noundef 8) #6, !noalias !43
256: %2 = icmp eq ptr %1, null
257: br i1 %2, label %bb14.i, label %bb14.i14.i
258:
259: bb14.i14.i: ; preds = %bb7.i13.i
260: %3 = ptrtoint ptr %1 to i64
261: br label %"_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h81d4a1c826168365E.exit"
262:
263: bb14.i: ; preds = %bb7.i13.i, %bb4.i10.i
264: %_15.sroa.4.0.i = phi i64 [ 0, %bb4.i10.i ], [ 8, %bb7.i13.i ]
265: ; call alloc::raw_vec::handle_reserve_error
not:104 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match expected
266: tail call void @_ZN5alloc7raw_vec20handle_reserve_error17h0eeb388cf1392e03E(i64 noundef %_15.sroa.4.0.i, i64 %array_size.i.i12.i) #7, !noalias !47
267: unreachable
268:
269: "_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17h81d4a1c826168365E.exit": ; preds = %bb2.i, %bb14.i14.i
270: %_15.sroa.10.0.ph.i = phi i64 [ 8, %bb2.i ], [ %3, %bb14.i14.i ]
271: %4 = inttoptr i64 %_15.sroa.10.0.ph.i to ptr
Build completed unsuccessfully in 0:11:28
272: store i64 %n, ptr %_0, align 8, !alias.scope !40, !noalias !48
273: %5 = getelementptr inbounds i8, ptr %_0, i64 8
274: store ptr %4, ptr %5, align 8, !alias.scope !40, !noalias !48
275: %6 = getelementptr inbounds i8, ptr %_0, i64 16
276: store i64 %n, ptr %6, align 8, !alias.scope !40, !noalias !48
277: ret void
278: }
279:
280: ; Function Attrs: nonlazybind uwtable
281: define void @vec_zero_tuple(ptr noalias nocapture noundef writeonly sret([24 x i8]) align 8 dereferenceable(24) %_0, i64 noundef %n) unnamed_addr #0 personality ptr @rust_eh_personality {
282: start:
283: tail call void @llvm.experimental.noalias.scope.decl(metadata !49)
284: %0 = icmp eq i64 %n, 0
285: br i1 %0, label %"_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17he33c997c22e39221E.exit", label %bb4.i10.i
286:
287: bb4.i10.i: ; preds = %start
288: %_4.i.i11.i = icmp ugt i64 %n, 1152921504606846975
289: %array_size.i.i12.i = shl nuw i64 %n, 3
290: br i1 %_4.i.i11.i, label %bb14.i, label %bb7.i13.i
291:
292: bb7.i13.i: ; preds = %bb4.i10.i
293: %1 = tail call noundef align 4 ptr @__rust_alloc_zeroed(i64 noundef %array_size.i.i12.i, i64 noundef 4) #6, !noalias !52
294: %2 = icmp eq ptr %1, null
295: br i1 %2, label %bb14.i, label %bb14.i14.i
296:
297: bb14.i14.i: ; preds = %bb7.i13.i
298: %3 = ptrtoint ptr %1 to i64
299: br label %"_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17he33c997c22e39221E.exit"
300:
301: bb14.i: ; preds = %bb7.i13.i, %bb4.i10.i
302: %_15.sroa.4.0.i = phi i64 [ 0, %bb4.i10.i ], [ 4, %bb7.i13.i ]
303: ; call alloc::raw_vec::handle_reserve_error
not:121 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match expected
304: tail call void @_ZN5alloc7raw_vec20handle_reserve_error17h0eeb388cf1392e03E(i64 noundef %_15.sroa.4.0.i, i64 %array_size.i.i12.i) #7, !noalias !49
305: unreachable
306:
307: "_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17he33c997c22e39221E.exit": ; preds = %start, %bb14.i14.i
308: %_15.sroa.10.0.ph.i = phi i64 [ 4, %start ], [ %3, %bb14.i14.i ]
309: %4 = inttoptr i64 %_15.sroa.10.0.ph.i to ptr
310: store i64 %n, ptr %_0, align 8, !alias.scope !49
311: %5 = getelementptr inbounds i8, ptr %_0, i64 8
312: store ptr %4, ptr %5, align 8, !alias.scope !49
313: %6 = getelementptr inbounds i8, ptr %_0, i64 16
314: store i64 %n, ptr %6, align 8, !alias.scope !49
315: ret void
316: }
317:
318: ; Function Attrs: nonlazybind uwtable
319: define void @vec_non_zero_tuple(ptr noalias nocapture noundef writeonly sret([24 x i8]) align 8 dereferenceable(24) %_0, i64 noundef %n) unnamed_addr #0 personality ptr @rust_eh_personality {
320: start:
321: tail call void @llvm.experimental.noalias.scope.decl(metadata !55)
322: %0 = icmp eq i64 %n, 0
323: br i1 %0, label %"_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17he33c997c22e39221E.exit", label %bb4.i9.i
324:
325: bb4.i9.i: ; preds = %start
326: %_4.i.i.i = icmp ugt i64 %n, 1152921504606846975
327: %array_size.i.i.i = shl nuw i64 %n, 3
328: br i1 %_4.i.i.i, label %bb17.i, label %bb7.i.i
329:
330: bb7.i.i: ; preds = %bb4.i9.i
331: %1 = load volatile i8, ptr @__rust_no_alloc_shim_is_unstable, align 1, !noalias !58
332: %_0.i.i.i.i.i = tail call noundef align 4 ptr @__rust_alloc(i64 noundef %array_size.i.i.i, i64 noundef 4) #6, !noalias !58
333: %2 = icmp eq ptr %_0.i.i.i.i.i, null
334: br i1 %2, label %bb17.i, label %bb18.i
335:
336: bb18.i: ; preds = %bb7.i.i
337: %_2816.i.i = icmp ugt i64 %n, 1
338: br i1 %_2816.i.i, label %bb3.i.i.preheader, label %bb4.i20.i
339:
340: bb3.i.i.preheader: ; preds = %bb18.i
341: %3 = add i64 %n, -1
342: %min.iters.check = icmp ult i64 %n, 5
343: br i1 %min.iters.check, label %bb3.i.i.preheader5, label %vector.ph
344:
345: vector.ph: ; preds = %bb3.i.i.preheader
346: %n.vec = and i64 %3, -4
347: %4 = shl i64 %n.vec, 3
348: %ind.end = getelementptr i8, ptr %_0.i.i.i.i.i, i64 %4
349: %ind.end2 = or i64 %n.vec, 1
350: br label %vector.body
351:
352: vector.body: ; preds = %vector.body, %vector.ph
353: %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
354: %5 = shl i64 %index, 3
355: %next.gep = getelementptr i8, ptr %_0.i.i.i.i.i, i64 %5
356: store <2 x i64> <i64 279172874240, i64 279172874240>, ptr %next.gep, align 4, !noalias !61
357: %6 = getelementptr i64, ptr %next.gep, i64 2
358: store <2 x i64> <i64 279172874240, i64 279172874240>, ptr %6, align 4, !noalias !61
359: %index.next = add nuw i64 %index, 4
360: %7 = icmp eq i64 %index.next, %n.vec
361: br i1 %7, label %middle.block, label %vector.body, !llvm.loop !64
362:
363: middle.block: ; preds = %vector.body
364: %cmp.n = icmp eq i64 %3, %n.vec
365: br i1 %cmp.n, label %bb4.i20.i, label %bb3.i.i.preheader5
366:
367: bb3.i.i.preheader5: ; preds = %bb3.i.i.preheader, %middle.block
368: %ptr.019.i.i.ph = phi ptr [ %_0.i.i.i.i.i, %bb3.i.i.preheader ], [ %ind.end, %middle.block ]
369: %iter.sroa.0.018.i.i.ph = phi i64 [ 1, %bb3.i.i.preheader ], [ %ind.end2, %middle.block ]
370: br label %bb3.i.i
371:
372: bb4.i20.i: ; preds = %bb3.i.i, %middle.block, %bb18.i
373: %ptr.0.lcssa.i49.i = phi ptr [ %_0.i.i.i.i.i, %bb18.i ], [ %ind.end, %middle.block ], [ %_16.i.i, %bb3.i.i ]
374: store i64 279172874240, ptr %ptr.0.lcssa.i49.i, align 4, !noalias !61
375: br label %"_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17he33c997c22e39221E.exit"
376:
377: bb3.i.i: ; preds = %bb3.i.i.preheader5, %bb3.i.i
378: %ptr.019.i.i = phi ptr [ %_16.i.i, %bb3.i.i ], [ %ptr.019.i.i.ph, %bb3.i.i.preheader5 ]
379: %iter.sroa.0.018.i.i = phi i64 [ %_0.i.i21.i, %bb3.i.i ], [ %iter.sroa.0.018.i.i.ph, %bb3.i.i.preheader5 ]
380: %_0.i.i21.i = add nuw nsw i64 %iter.sroa.0.018.i.i, 1
381: store i64 279172874240, ptr %ptr.019.i.i, align 4, !noalias !61
382: %_16.i.i = getelementptr inbounds { i16, i8, [1 x i8], i32 }, ptr %ptr.019.i.i, i64 1
383: %exitcond.not.i.i = icmp eq i64 %_0.i.i21.i, %n
384: br i1 %exitcond.not.i.i, label %bb4.i20.i, label %bb3.i.i, !llvm.loop !65
385:
386: bb17.i: ; preds = %bb7.i.i, %bb4.i9.i
387: %_20.sroa.4.0.i = phi i64 [ 0, %bb4.i9.i ], [ 4, %bb7.i.i ]
388: ; call alloc::raw_vec::handle_reserve_error
not:138 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match expected
389: tail call void @_ZN5alloc7raw_vec20handle_reserve_error17h0eeb388cf1392e03E(i64 noundef %_20.sroa.4.0.i, i64 %array_size.i.i.i) #7, !noalias !55
390: unreachable
391:
392: "_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17he33c997c22e39221E.exit": ; preds = %start, %bb4.i20.i
393: %.sink.i = phi ptr [ %_0.i.i.i.i.i, %bb4.i20.i ], [ inttoptr (i64 4 to ptr), %start ]
394: store i64 %n, ptr %_0, align 8, !alias.scope !55
395: %8 = getelementptr inbounds i8, ptr %_0, i64 8
396: store ptr %.sink.i, ptr %8, align 8, !alias.scope !55
397: %9 = getelementptr inbounds i8, ptr %_0, i64 16
398: store i64 %n, ptr %9, align 8, !alias.scope !55
399: ret void
400: }
401:
402: ; Function Attrs: nonlazybind uwtable
403: define void @vec_option_bool(ptr noalias nocapture noundef writeonly sret([24 x i8]) align 8 dereferenceable(24) %_0, i64 noundef %n) unnamed_addr #0 personality ptr @rust_eh_personality {
404: start:
405: tail call void @llvm.experimental.noalias.scope.decl(metadata !66)
406: %0 = icmp eq i64 %n, 0
407: br i1 %0, label %"_ZN62_$LT$T$u20$as$u20$alloc..vec..spec_from_elem..SpecFromElem$GT$9from_elem17hbca8f81a57daf680E.exit", label %bb4.i9.i
408:
409: bb4.i9.i: ; preds = %start
410: %_4.i.i10.i = icmp slt i64 %n, 0
411: br i1 %_4.i.i10.i, label %bb14.i, label %bb7.i11.i
412:
413: bb7.i11.i: ; preds = %bb4.i9.i
414: %1 = tail call noundef ptr @__rust_alloc_zeroed(i64 noundef %n, i64 noundef 1) #6, !noalias !69
:broken_heart: Test failed - checks-actions
I've removed word "reserve" from helper function name to avoid confusing tests that look for absence of functions like try_reserve
.
Cool! r=me once CI comes in green.
@bors r+
:pushpin: Commit 443e29cd97a68a5af171abf07fc1c4cf08577a73 has been approved by joboet
It is now in the queue for this repository.
:hourglass: Testing commit 443e29cd97a68a5af171abf07fc1c4cf08577a73 with merge c9f8f3438a8134a413aa5d4903e0196e44e37bbc...