Skip to content

Conversation

HKalbasi
Copy link
Member

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Sep 20, 2025
@saethlin
Copy link
Member

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rust-bors

This comment has been minimized.

rust-bors bot added a commit that referenced this pull request Sep 20, 2025
[Experiment] Do not emit noalias for inline functions
@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Sep 20, 2025
@rust-bors
Copy link

rust-bors bot commented Sep 21, 2025

☀️ Try build successful (CI)
Build commit: b1487a9 (b1487a9dc062157b115f8459b4c4d22d2570fc21, parent: dd7fda570040e8a736f7d8bc28ddd1b444aabc82)

@rust-timer

This comment has been minimized.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (b1487a9): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

Next Steps: If you can justify the regressions found in this try perf run, please do so in sufficient writing along with @rustbot label: +perf-regression-triaged. If not, please fix the regressions and do another perf run. If its results are neutral or positive, the label will be automatically removed.

@bors rollup=never
@rustbot label: -S-waiting-on-perf +perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
0.2% [0.1%, 0.5%] 54
Regressions ❌
(secondary)
0.5% [0.1%, 1.1%] 47
Improvements ✅
(primary)
-0.6% [-2.2%, -0.1%] 40
Improvements ✅
(secondary)
-0.6% [-3.6%, -0.1%] 33
All ❌✅ (primary) -0.1% [-2.2%, 0.5%] 94

Max RSS (memory usage)

Results (primary -0.2%, secondary -2.0%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
3.7% [3.7%, 3.7%] 1
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-2.2% [-2.3%, -2.1%] 2
Improvements ✅
(secondary)
-2.0% [-2.6%, -1.4%] 2
All ❌✅ (primary) -0.2% [-2.3%, 3.7%] 3

Cycles

Results (primary 0.9%, secondary 1.8%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
2.8% [2.3%, 4.6%] 6
Regressions ❌
(secondary)
3.6% [2.1%, 4.6%] 19
Improvements ✅
(primary)
-2.0% [-2.4%, -1.7%] 4
Improvements ✅
(secondary)
-2.4% [-3.0%, -2.1%] 8
All ❌✅ (primary) 0.9% [-2.4%, 4.6%] 10

Binary size

Results (primary 0.1%, secondary 0.1%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
0.1% [0.0%, 0.2%] 11
Regressions ❌
(secondary)
0.1% [0.1%, 0.6%] 38
Improvements ✅
(primary)
-0.1% [-0.1%, -0.1%] 4
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 0.1% [-0.1%, 0.2%] 15

Bootstrap: 472.936s -> 470.008s (-0.62%)
Artifact size: 389.95 MiB -> 390.01 MiB (0.02%)

@rustbot rustbot added perf-regression Performance regression. and removed S-waiting-on-perf Status: Waiting on a perf run to be completed. labels Sep 21, 2025
@saethlin
Copy link
Member

That result definitely indicates some kind of missed optimization in LLVM, noalias shouldn't be regressing codegen. Though isolating why might be fiendishly difficult.

Overall, the above report reminds me this perf experiment I did a little while ago: #121068 (comment) (basically the same result, check builds are slower which means less optimization of the compiler, but the hashmap runtime benchmarks benefit)

@HKalbasi
Copy link
Member Author

Sigh. So we can't attach that meaning to the #[inline] considering how it is currently used. I think we can still use it for experiments, but we need something else for the long term plan.

Now that we are here, let's test it with #[inline(always)] as well. Maybe the missed optimizations were due to functions that requested #[inline] but didn't get inlined. If it regresses this time as well, there is something strange happening...

@HKalbasi
Copy link
Member Author

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

rust-bors bot added a commit that referenced this pull request Sep 21, 2025
[Experiment] Do not emit noalias for inline functions
@rust-bors

This comment has been minimized.

@rust-bors
Copy link

rust-bors bot commented Sep 21, 2025

☀️ Try build successful (CI)
Build commit: f1987df (f1987df82d2c47926125142f58fb0d7f7a85f06a, parent: dd7fda570040e8a736f7d8bc28ddd1b444aabc82)

@saethlin
Copy link
Member

If it regresses this time as well, there is something strange happening...

LLVM has scoped noalias metadata, which is supposed to represent noalias information from a function that got inlined. So I don't think it's completely accurate to say that we expect noalias on inline(always) to be useless.

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rust-bors

This comment has been minimized.

rust-bors bot added a commit that referenced this pull request Sep 21, 2025
[Experiment] Do not emit noalias for inline functions
@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Sep 21, 2025
@saethlin
Copy link
Member

@bors try-

@saethlin
Copy link
Member

I didn't notice you successfully did a try build. This should be faster.

@rust-timer build f1987df

@rust-timer

This comment has been minimized.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (f1987df): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

Next Steps: If you can justify the regressions found in this try perf run, please do so in sufficient writing along with @rustbot label: +perf-regression-triaged. If not, please fix the regressions and do another perf run. If its results are neutral or positive, the label will be automatically removed.

@bors rollup=never
@rustbot label: -S-waiting-on-perf +perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
0.3% [0.3%, 0.3%] 1
Regressions ❌
(secondary)
0.3% [0.3%, 0.3%] 1
Improvements ✅
(primary)
-0.5% [-0.6%, -0.4%] 4
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) -0.3% [-0.6%, 0.3%] 5

Max RSS (memory usage)

Results (primary -2.2%, secondary -0.7%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
1.9% [1.9%, 1.9%] 1
Improvements ✅
(primary)
-2.2% [-2.3%, -2.1%] 2
Improvements ✅
(secondary)
-2.1% [-2.7%, -1.4%] 2
All ❌✅ (primary) -2.2% [-2.3%, -2.1%] 2

Cycles

Results (secondary -2.3%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-2.3% [-2.3%, -2.3%] 1
All ❌✅ (primary) - - 0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 472.936s -> 473.189s (0.05%)
Artifact size: 389.95 MiB -> 389.98 MiB (0.01%)

@rustbot rustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Sep 21, 2025
@rust-bors
Copy link

rust-bors bot commented Sep 21, 2025

☀️ Try build successful (CI)
Build commit: 6975922 (6975922bc2c65709c792fd4ac94896e337bd7d27, parent: 1d23da6b7304d9e2a2c3dcb1b0aaa709cb9bc4ad)

@HKalbasi
Copy link
Member Author

Is this result statistically significant? The regressed example didn't appear in the previous one.

Anyway, I lost my interest in #[inline] functions. As you said, it may harm some optimizations (thanks for letting me experiment that) but people expect from #[inline] to enable more optimizations.

Here is my new idea: instead of disabling noalias and writeable for #[inline] functions, we can disable it for functions that involve raw pointers in their signature. This one is more aligned with people expectations (using raw pointers may disable some aliasing optimizations). From a quick search, I didn't find any notable function in std which its signature involves both raw pointers and references, and suffer from losing noalias. I can fire up an experiment if you don't see any obvious problem with this approach.

@HKalbasi HKalbasi changed the title [Experiment] Do not emit noalias for inline functions [Experiment] Do not emit noalias for some functions Sep 21, 2025
@HKalbasi HKalbasi changed the title [Experiment] Do not emit noalias for some functions [Experiment] Do not emit noalias for some functions including .as_mut_ptr() Sep 21, 2025
@saethlin
Copy link
Member

saethlin commented Sep 21, 2025

Is this result statistically significant? The regressed example didn't appear in the previous one.

The instruction count differences are in optimized builds, which probably means that the impact of generating less work for LLVM dominated in those cases. Whether they are statistically significant doesn't matter because of which scenarios reported a change.

From a quick search, I didn't find any notable function in std which its signature involves both raw pointers and references, and suffer from losing noalias

You cannot find such functions via text search. Retags recurse into structures, and in our current implementation, if your type wraps a reference but is passed as Scalar or ScalarPair, its pointer still gets noalias even if the function signature does not itself mention a reference. So I fear this may have very surprising applicability, though it errs on the side of surprisingly removing noalias so perhaps that's not a huge concern. Though you can argue from the opposite direction: That the behavior of reference wrappers currently is surprisingly adding noalias.

My bigger concern with this approach is that you are trying to carve out "functions like slice::as_mut_ptr" by just looking at the signature when the problem is a combination of the signature (that it takes a reference) and the implementation (all the function does is convert the reference to a raw pointer).

I can fire up an experiment if you don't see any obvious problem with this approach.

It can't hurt to have run the experiment; if it turns up no effect that doesn't necessarily mean anything, but if it turns up a negative effect we can discard this line of reasoning :p
Implement it and I'll issue the bot command(s).

@HKalbasi
Copy link
Member Author

@bors try

@rust-bors

This comment has been minimized.

rust-bors bot added a commit that referenced this pull request Sep 21, 2025
[Experiment] Do not emit noalias for some functions including `.as_mut_ptr()`
@HKalbasi
Copy link
Member Author

My bigger concern with this approach is that you are trying to carve out "functions like slice::as_mut_ptr" by just looking at the signature when the problem is a combination of the signature (that it takes a reference) and the implementation (all the function does is convert the reference to a raw pointer).

I think looking at the implementation in the model is hard (hard to find good properties, hard to implement, and hard to reason about for users). Maybe there is no easy solution, but let's try.

@rust-log-analyzer
Copy link
Collaborator

The job aarch64-gnu-llvm-20-1 failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)

---- [codegen] tests/codegen-llvm/drop-in-place-noalias.rs stdout ----
------FileCheck stdout------------------------------

------FileCheck stderr------------------------------
/checkout/tests/codegen-llvm/drop-in-place-noalias.rs:10:11: error: CHECK: expected string not found in input
// CHECK: define internal void @{{.*}}core{{.*}}ptr{{.*}}drop_in_place{{.*}}StructUnpin{{.*}}(ptr noalias noundef align 4 dereferenceable(12) %{{.+}})
          ^
/checkout/obj/build/aarch64-unknown-linux-gnu/test/codegen-llvm/drop-in-place-noalias/drop-in-place-noalias.ll:1:1: note: scanning from here
; ModuleID = 'drop_in_place_noalias.d3bd3bc72675f241-cgu.0'
^

Input file: /checkout/obj/build/aarch64-unknown-linux-gnu/test/codegen-llvm/drop-in-place-noalias/drop-in-place-noalias.ll
Check file: /checkout/tests/codegen-llvm/drop-in-place-noalias.rs

-dump-input=help explains the following input dump.

Input was:
<<<<<<
          1: ; ModuleID = 'drop_in_place_noalias.d3bd3bc72675f241-cgu.0' 
check:10     X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match found
          2: source_filename = "drop_in_place_noalias.d3bd3bc72675f241-cgu.0" 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          3: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          4: target triple = "aarch64-unknown-linux-gnu" 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          5:  
check:10     ~
          6: ; core::ptr::drop_in_place<drop_in_place_noalias::StructUnpin> 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          7: ; Function Attrs: uwtable 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~
          8: define internal void @"_ZN4core3ptr55drop_in_place$LT$drop_in_place_noalias..StructUnpin$GT$17h6fe4e8f3985ffa50E"(ptr noundef align 4 dereferenceable(12) %_1) unnamed_addr #0 { 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          9: start: 
check:10     ~~~~~~~
         10: ; call <drop_in_place_noalias::StructUnpin as core::ops::drop::Drop>::drop 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         11:  call void @"_ZN76_$LT$drop_in_place_noalias..StructUnpin$u20$as$u20$core..ops..drop..Drop$GT$4drop17h79ee8917f1b99208E"(ptr noalias noundef align 4 dereferenceable(12) %_1) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         12:  ret void 
check:10     ~~~~~~~~~~
         13: } 
check:10     ~~
         14:  
check:10     ~
         15: ; core::ptr::drop_in_place<drop_in_place_noalias::StructNotUnpin> 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         16: ; Function Attrs: uwtable 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~
         17: define internal void @"_ZN4core3ptr58drop_in_place$LT$drop_in_place_noalias..StructNotUnpin$GT$17ha9408c6377817d82E"(ptr noundef nonnull align 4 %_1) unnamed_addr #0 { 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         18: start: 
check:10     ~~~~~~~
         19: ; call <drop_in_place_noalias::StructNotUnpin as core::ops::drop::Drop>::drop 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         20:  call void @"_ZN79_$LT$drop_in_place_noalias..StructNotUnpin$u20$as$u20$core..ops..drop..Drop$GT$4drop17haf1bf97298995bf7E"(ptr noundef nonnull align 4 %_1) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         21:  ret void 
check:10     ~~~~~~~~~~
         22: } 
check:10     ~~
         23:  
check:10     ~
         24: ; <drop_in_place_noalias::StructUnpin as core::ops::drop::Drop>::drop 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         25: ; Function Attrs: uwtable 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~
         26: define internal void @"_ZN76_$LT$drop_in_place_noalias..StructUnpin$u20$as$u20$core..ops..drop..Drop$GT$4drop17h79ee8917f1b99208E"(ptr noalias noundef align 4 dereferenceable(12) %self) unnamed_addr #0 { 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         27: start: 
check:10     ~~~~~~~
         28:  ret void 
check:10     ~~~~~~~~~~
         29: } 
check:10     ~~
         30:  
check:10     ~
         31: ; <drop_in_place_noalias::StructNotUnpin as core::ops::drop::Drop>::drop 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         32: ; Function Attrs: uwtable 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~
         33: define internal void @"_ZN79_$LT$drop_in_place_noalias..StructNotUnpin$u20$as$u20$core..ops..drop..Drop$GT$4drop17haf1bf97298995bf7E"(ptr noundef nonnull align 4 %self) unnamed_addr #0 { 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         34: start: 
check:10     ~~~~~~~
         35:  ret void 
check:10     ~~~~~~~~~~
---
         38: ; drop_in_place_noalias::main 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         39: ; Function Attrs: uwtable 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~
         40: define void @_ZN21drop_in_place_noalias4main17h7b860049f50f322cE(ptr noalias noundef readonly align 4 dereferenceable(12) %x, ptr noalias noundef align 4 dereferenceable(12) %y) unnamed_addr #0 personality ptr @rust_eh_personality { 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         41: start: 
check:10     ~~~~~~~
         42:  %0 = alloca [16 x i8], align 8 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
         45:  %_3 = alloca [12 x i8], align 4 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         46:  store i8 1, ptr %_5, align 1 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         47:  call void @llvm.lifetime.start.p0(i64 12, ptr %_3) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         48:  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %_3, ptr align 4 %x, i64 12, i1 false) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         49: ; invoke core::ptr::drop_in_place<drop_in_place_noalias::StructUnpin> 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         50:  invoke void @"_ZN4core3ptr55drop_in_place$LT$drop_in_place_noalias..StructUnpin$GT$17h6fe4e8f3985ffa50E"(ptr noundef align 4 dereferenceable(12) %_3) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         51:  to label %bb4 unwind label %cleanup 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         52:  
check:10     ~
         53: bb3: ; preds = %cleanup 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~
         54:  %1 = load i8, ptr %_5, align 1, !range !2, !noundef !3 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         55:  %2 = trunc nuw i8 %1 to i1 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         56:  br i1 %2, label %bb2, label %bb1 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         57:  
check:10     ~
         58: cleanup: ; preds = %bb4, %start 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         59:  %3 = landingpad { ptr, i32 } 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         60:  cleanup 
check:10     ~~~~~~~~~
         61:  %4 = extractvalue { ptr, i32 } %3, 0 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         62:  %5 = extractvalue { ptr, i32 } %3, 1 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         63:  call void @llvm.lifetime.start.p0(i64 16, ptr %0) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         64:  store ptr %4, ptr %0, align 8 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         65:  %6 = getelementptr inbounds i8, ptr %0, i64 8 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         66:  store i32 %5, ptr %6, align 8 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         67:  br label %bb3 
check:10     ~~~~~~~~~~~~~~~
         68:  
check:10     ~
         69: bb4: ; preds = %start 
check:10     ~~~~~~~~~~~~~~~~~~~~~~
         70:  call void @llvm.lifetime.end.p0(i64 12, ptr %_3) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         71:  call void @llvm.lifetime.start.p0(i64 12, ptr %_4) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         72:  store i8 0, ptr %_5, align 1 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         73:  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %_4, ptr align 4 %y, i64 12, i1 false) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         74: ; invoke core::ptr::drop_in_place<drop_in_place_noalias::StructNotUnpin> 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         75:  invoke void @"_ZN4core3ptr58drop_in_place$LT$drop_in_place_noalias..StructNotUnpin$GT$17ha9408c6377817d82E"(ptr noundef nonnull align 4 %_4) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         76:  to label %bb5 unwind label %cleanup 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         77:  
check:10     ~
         78: bb5: ; preds = %bb4 
check:10     ~~~~~~~~~~~~~~~~~~~~
         79:  call void @llvm.lifetime.end.p0(i64 12, ptr %_4) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         80:  ret void 
check:10     ~~~~~~~~~~
         81:  
check:10     ~
         82: bb1: ; preds = %bb2, %bb3 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~
         83:  %7 = load ptr, ptr %0, align 8, !noundef !3 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         84:  %8 = getelementptr inbounds i8, ptr %0, i64 8 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         85:  %9 = load i32, ptr %8, align 8, !noundef !3 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         86:  call void @llvm.lifetime.end.p0(i64 16, ptr %0) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         87:  %10 = insertvalue { ptr, i32 } poison, ptr %7, 0 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         88:  %11 = insertvalue { ptr, i32 } %10, i32 %9, 1 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         89:  resume { ptr, i32 } %11 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~
         90:  
check:10     ~
         91: bb2: ; preds = %bb3 
check:10     ~~~~~~~~~~~~~~~~~~~~
         92: ; invoke core::ptr::drop_in_place<drop_in_place_noalias::StructNotUnpin> 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         93:  invoke void @"_ZN4core3ptr58drop_in_place$LT$drop_in_place_noalias..StructNotUnpin$GT$17ha9408c6377817d82E"(ptr noundef nonnull align 4 %y) #5 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         94:  to label %bb1 unwind label %terminate 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         95:  
check:10     ~
         96: terminate: ; preds = %bb2 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~
         97:  %12 = landingpad { ptr, i32 } 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         98:  filter [0 x ptr] zeroinitializer 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         99: ; call core::panicking::panic_in_cleanup 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        100:  call void @_ZN4core9panicking16panic_in_cleanup17h8524614f71539403E() #6 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        101:  unreachable 
check:10     ~~~~~~~~~~~~~
          .
          .
          .
>>>>>>

------------------------------------------

error: verification with 'FileCheck' failed
status: exit status: 1
command: "/usr/lib/llvm-20/bin/FileCheck" "--input-file" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/codegen-llvm/drop-in-place-noalias/drop-in-place-noalias.ll" "/checkout/tests/codegen-llvm/drop-in-place-noalias.rs" "--check-prefix=CHECK" "--allow-unused-prefixes" "--dump-input-context" "100"
stdout: none
--- stderr -------------------------------
/checkout/tests/codegen-llvm/drop-in-place-noalias.rs:10:11: error: CHECK: expected string not found in input
// CHECK: define internal void @{{.*}}core{{.*}}ptr{{.*}}drop_in_place{{.*}}StructUnpin{{.*}}(ptr noalias noundef align 4 dereferenceable(12) %{{.+}})
          ^
/checkout/obj/build/aarch64-unknown-linux-gnu/test/codegen-llvm/drop-in-place-noalias/drop-in-place-noalias.ll:1:1: note: scanning from here
; ModuleID = 'drop_in_place_noalias.d3bd3bc72675f241-cgu.0'
^

Input file: /checkout/obj/build/aarch64-unknown-linux-gnu/test/codegen-llvm/drop-in-place-noalias/drop-in-place-noalias.ll
Check file: /checkout/tests/codegen-llvm/drop-in-place-noalias.rs

-dump-input=help explains the following input dump.

Input was:
<<<<<<
          1: ; ModuleID = 'drop_in_place_noalias.d3bd3bc72675f241-cgu.0' 
check:10     X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match found
          2: source_filename = "drop_in_place_noalias.d3bd3bc72675f241-cgu.0" 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          3: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          4: target triple = "aarch64-unknown-linux-gnu" 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          5:  
check:10     ~
          6: ; core::ptr::drop_in_place<drop_in_place_noalias::StructUnpin> 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          7: ; Function Attrs: uwtable 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~
          8: define internal void @"_ZN4core3ptr55drop_in_place$LT$drop_in_place_noalias..StructUnpin$GT$17h6fe4e8f3985ffa50E"(ptr noundef align 4 dereferenceable(12) %_1) unnamed_addr #0 { 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          9: start: 
check:10     ~~~~~~~
         10: ; call <drop_in_place_noalias::StructUnpin as core::ops::drop::Drop>::drop 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         11:  call void @"_ZN76_$LT$drop_in_place_noalias..StructUnpin$u20$as$u20$core..ops..drop..Drop$GT$4drop17h79ee8917f1b99208E"(ptr noalias noundef align 4 dereferenceable(12) %_1) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         12:  ret void 
check:10     ~~~~~~~~~~
         13: } 
check:10     ~~
         14:  
check:10     ~
         15: ; core::ptr::drop_in_place<drop_in_place_noalias::StructNotUnpin> 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         16: ; Function Attrs: uwtable 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~
         17: define internal void @"_ZN4core3ptr58drop_in_place$LT$drop_in_place_noalias..StructNotUnpin$GT$17ha9408c6377817d82E"(ptr noundef nonnull align 4 %_1) unnamed_addr #0 { 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         18: start: 
check:10     ~~~~~~~
         19: ; call <drop_in_place_noalias::StructNotUnpin as core::ops::drop::Drop>::drop 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         20:  call void @"_ZN79_$LT$drop_in_place_noalias..StructNotUnpin$u20$as$u20$core..ops..drop..Drop$GT$4drop17haf1bf97298995bf7E"(ptr noundef nonnull align 4 %_1) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         21:  ret void 
check:10     ~~~~~~~~~~
         22: } 
check:10     ~~
         23:  
check:10     ~
         24: ; <drop_in_place_noalias::StructUnpin as core::ops::drop::Drop>::drop 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         25: ; Function Attrs: uwtable 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~
         26: define internal void @"_ZN76_$LT$drop_in_place_noalias..StructUnpin$u20$as$u20$core..ops..drop..Drop$GT$4drop17h79ee8917f1b99208E"(ptr noalias noundef align 4 dereferenceable(12) %self) unnamed_addr #0 { 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         27: start: 
check:10     ~~~~~~~
         28:  ret void 
check:10     ~~~~~~~~~~
         29: } 
check:10     ~~
         30:  
check:10     ~
         31: ; <drop_in_place_noalias::StructNotUnpin as core::ops::drop::Drop>::drop 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         32: ; Function Attrs: uwtable 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~
         33: define internal void @"_ZN79_$LT$drop_in_place_noalias..StructNotUnpin$u20$as$u20$core..ops..drop..Drop$GT$4drop17haf1bf97298995bf7E"(ptr noundef nonnull align 4 %self) unnamed_addr #0 { 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         34: start: 
check:10     ~~~~~~~
         35:  ret void 
check:10     ~~~~~~~~~~
---
         38: ; drop_in_place_noalias::main 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         39: ; Function Attrs: uwtable 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~
         40: define void @_ZN21drop_in_place_noalias4main17h7b860049f50f322cE(ptr noalias noundef readonly align 4 dereferenceable(12) %x, ptr noalias noundef align 4 dereferenceable(12) %y) unnamed_addr #0 personality ptr @rust_eh_personality { 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         41: start: 
check:10     ~~~~~~~
         42:  %0 = alloca [16 x i8], align 8 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
         45:  %_3 = alloca [12 x i8], align 4 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         46:  store i8 1, ptr %_5, align 1 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         47:  call void @llvm.lifetime.start.p0(i64 12, ptr %_3) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         48:  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %_3, ptr align 4 %x, i64 12, i1 false) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         49: ; invoke core::ptr::drop_in_place<drop_in_place_noalias::StructUnpin> 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         50:  invoke void @"_ZN4core3ptr55drop_in_place$LT$drop_in_place_noalias..StructUnpin$GT$17h6fe4e8f3985ffa50E"(ptr noundef align 4 dereferenceable(12) %_3) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         51:  to label %bb4 unwind label %cleanup 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         52:  
check:10     ~
         53: bb3: ; preds = %cleanup 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~
         54:  %1 = load i8, ptr %_5, align 1, !range !2, !noundef !3 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         55:  %2 = trunc nuw i8 %1 to i1 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         56:  br i1 %2, label %bb2, label %bb1 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         57:  
check:10     ~
         58: cleanup: ; preds = %bb4, %start 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         59:  %3 = landingpad { ptr, i32 } 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         60:  cleanup 
check:10     ~~~~~~~~~
         61:  %4 = extractvalue { ptr, i32 } %3, 0 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         62:  %5 = extractvalue { ptr, i32 } %3, 1 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         63:  call void @llvm.lifetime.start.p0(i64 16, ptr %0) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         64:  store ptr %4, ptr %0, align 8 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         65:  %6 = getelementptr inbounds i8, ptr %0, i64 8 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         66:  store i32 %5, ptr %6, align 8 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         67:  br label %bb3 
check:10     ~~~~~~~~~~~~~~~
         68:  
check:10     ~
         69: bb4: ; preds = %start 
check:10     ~~~~~~~~~~~~~~~~~~~~~~
         70:  call void @llvm.lifetime.end.p0(i64 12, ptr %_3) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         71:  call void @llvm.lifetime.start.p0(i64 12, ptr %_4) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         72:  store i8 0, ptr %_5, align 1 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         73:  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %_4, ptr align 4 %y, i64 12, i1 false) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         74: ; invoke core::ptr::drop_in_place<drop_in_place_noalias::StructNotUnpin> 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         75:  invoke void @"_ZN4core3ptr58drop_in_place$LT$drop_in_place_noalias..StructNotUnpin$GT$17ha9408c6377817d82E"(ptr noundef nonnull align 4 %_4) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         76:  to label %bb5 unwind label %cleanup 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         77:  
check:10     ~
         78: bb5: ; preds = %bb4 
check:10     ~~~~~~~~~~~~~~~~~~~~
         79:  call void @llvm.lifetime.end.p0(i64 12, ptr %_4) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         80:  ret void 
check:10     ~~~~~~~~~~
         81:  
check:10     ~
         82: bb1: ; preds = %bb2, %bb3 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~
         83:  %7 = load ptr, ptr %0, align 8, !noundef !3 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         84:  %8 = getelementptr inbounds i8, ptr %0, i64 8 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         85:  %9 = load i32, ptr %8, align 8, !noundef !3 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         86:  call void @llvm.lifetime.end.p0(i64 16, ptr %0) 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         87:  %10 = insertvalue { ptr, i32 } poison, ptr %7, 0 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         88:  %11 = insertvalue { ptr, i32 } %10, i32 %9, 1 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         89:  resume { ptr, i32 } %11 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~
         90:  
check:10     ~
         91: bb2: ; preds = %bb3 
check:10     ~~~~~~~~~~~~~~~~~~~~
         92: ; invoke core::ptr::drop_in_place<drop_in_place_noalias::StructNotUnpin> 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         93:  invoke void @"_ZN4core3ptr58drop_in_place$LT$drop_in_place_noalias..StructNotUnpin$GT$17ha9408c6377817d82E"(ptr noundef nonnull align 4 %y) #5 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         94:  to label %bb1 unwind label %terminate 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         95:  
check:10     ~
         96: terminate: ; preds = %bb2 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~
         97:  %12 = landingpad { ptr, i32 } 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         98:  filter [0 x ptr] zeroinitializer 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         99: ; call core::panicking::panic_in_cleanup 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        100:  call void @_ZN4core9panicking16panic_in_cleanup17h8524614f71539403E() #6 
check:10     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        101:  unreachable 
check:10     ~~~~~~~~~~~~~
          .
          .
---
---- [codegen] tests/codegen-llvm/drop-in-place-noalias.rs stdout end ----
---- [codegen] tests/codegen-llvm/function-arguments.rs stdout ----
------FileCheck stdout------------------------------

------FileCheck stderr------------------------------
/checkout/tests/codegen-llvm/function-arguments.rs:248:11: error: CHECK: expected string not found in input
// CHECK: @trait_raw(ptr noundef %_1.0, {{.+}} noalias noundef readonly align {{.*}} dereferenceable({{.*}}) %_1.1)
          ^
/checkout/obj/build/aarch64-unknown-linux-gnu/test/codegen-llvm/function-arguments/function-arguments.ll:519:73: note: scanning from here
define void @option_trait_borrow_mut(ptr noundef align 1 %x.0, ptr %x.1) unnamed_addr #1 {
                                                                        ^
/checkout/obj/build/aarch64-unknown-linux-gnu/test/codegen-llvm/function-arguments/function-arguments.ll:525:1: note: possible intended match here
define void @trait_raw(ptr noundef %_1.0, ptr noundef readonly align 8 dereferenceable(32) %_1.1) unnamed_addr #1 {
^

Input file: /checkout/obj/build/aarch64-unknown-linux-gnu/test/codegen-llvm/function-arguments/function-arguments.ll
Check file: /checkout/tests/codegen-llvm/function-arguments.rs

-dump-input=help explains the following input dump.

Input was:
<<<<<<
             .
             .
             .
           419: } 
           420:  
           421: ; Function Attrs: uwtable 
           422: define void @raw_struct(ptr noundef %_1) unnamed_addr #1 { 
           423: start: 
           424:  ret void 
           425: } 
           426:  
           427: ; Function Attrs: uwtable 
           428: define void @raw_option_nonnull_struct(ptr noundef %_1) unnamed_addr #1 { 
           429: start: 
           430:  ret void 
           431: } 
           432:  
           433: ; Function Attrs: uwtable 
           434: define noundef nonnull align 4 ptr @_box(ptr noalias noundef nonnull align 4 %x) unnamed_addr #1 { 
           435: start: 
           436:  ret ptr %x 
           437: } 
           438:  
           439: ; Function Attrs: uwtable 
           440: define void @_box_custom(ptr noundef nonnull align 4 %x.0, ptr noalias noundef nonnull readonly align 1 %x.1) unnamed_addr #1 { 
           441: start: 
           442:  %_2 = alloca [16 x i8], align 8 
           443:  call void @llvm.lifetime.start.p0(i64 16, ptr %_2) 
           444:  store ptr %x.0, ptr %_2, align 8 
           445:  %0 = getelementptr inbounds i8, ptr %_2, i64 8 
           446:  store ptr %x.1, ptr %0, align 8 
           447: ; call core::ptr::drop_in_place<alloc::boxed::Box<i32,&alloc::alloc::Global>> 
           448:  call void @"_ZN4core3ptr76drop_in_place$LT$alloc..boxed..Box$LT$i32$C$$RF$alloc..alloc..Global$GT$$GT$17h9a6db12582182d71E"(ptr noundef align 8 dereferenceable(16) %_2) 
           449:  call void @llvm.lifetime.end.p0(i64 16, ptr %_2) 
           450:  ret void 
           451: } 
           452:  
           453: ; Function Attrs: uwtable 
           454: define noundef nonnull align 4 ptr @notunpin_box(ptr noundef nonnull align 4 %x) unnamed_addr #1 { 
           455: start: 
           456:  ret ptr %x 
           457: } 
           458:  
           459: ; Function Attrs: uwtable 
           460: define void @struct_return(ptr dead_on_unwind noalias noundef writable sret([32 x i8]) align 4 dereferenceable(32) %_0) unnamed_addr #1 { 
           461: start: 
           462:  %_1 = alloca [32 x i8], align 4 
           463:  call void @llvm.lifetime.start.p0(i64 32, ptr %_1) 
           464:  call void @llvm.memset.p0.i64(ptr align 4 %_1, i8 0, i64 32, i1 false) 
           465:  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %_0, ptr align 4 %_1, i64 32, i1 false) 
           466:  call void @llvm.lifetime.end.p0(i64 32, ptr %_1) 
           467:  ret void 
           468: } 
           469:  
           470: ; Function Attrs: uwtable 
           471: define void @helper(i64 noundef %_1) unnamed_addr #1 { 
           472: start: 
           473:  ret void 
           474: } 
           475:  
           476: ; Function Attrs: uwtable 
           477: define void @slice(ptr noalias noundef nonnull readonly align 1 %_1.0, i64 noundef %_1.1) unnamed_addr #1 { 
           478: start: 
           479:  ret void 
           480: } 
           481:  
           482: ; Function Attrs: uwtable 
           483: define void @mutable_slice(ptr noalias noundef nonnull align 1 %_1.0, i64 noundef %_1.1) unnamed_addr #1 { 
           484: start: 
           485:  ret void 
           486: } 
           487:  
           488: ; Function Attrs: uwtable 
           489: define void @unsafe_slice(ptr noundef nonnull align 2 %_1.0, i64 noundef %_1.1) unnamed_addr #1 { 
           490: start: 
           491:  ret void 
           492: } 
           493:  
           494: ; Function Attrs: uwtable 
           495: define void @raw_slice(ptr noundef %_1.0, i64 noundef %_1.1) unnamed_addr #1 { 
           496: start: 
           497:  ret void 
           498: } 
           499:  
           500: ; Function Attrs: uwtable 
           501: define void @str(ptr noalias noundef nonnull readonly align 1 %_1.0, i64 noundef %_1.1) unnamed_addr #1 { 
           502: start: 
           503:  ret void 
           504: } 
           505:  
           506: ; Function Attrs: uwtable 
           507: define void @trait_borrow(ptr noundef nonnull align 1 %_1.0, ptr noalias noundef readonly align 8 dereferenceable(32) %_1.1) unnamed_addr #1 { 
           508: start: 
           509:  ret void 
           510: } 
           511:  
           512: ; Function Attrs: uwtable 
           513: define void @option_trait_borrow(ptr noundef align 1 %x.0, ptr %x.1) unnamed_addr #1 { 
           514: start: 
           515:  ret void 
           516: } 
           517:  
           518: ; Function Attrs: uwtable 
           519: define void @option_trait_borrow_mut(ptr noundef align 1 %x.0, ptr %x.1) unnamed_addr #1 { 
check:248'0                                                                             X~~~~~~~~~~~~~~~~~~ error: no match found
           520: start: 
check:248'0     ~~~~~~~
           521:  ret void 
check:248'0     ~~~~~~~~~~
           522: } 
check:248'0     ~~
           523:  
check:248'0     ~
           524: ; Function Attrs: uwtable 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           525: define void @trait_raw(ptr noundef %_1.0, ptr noundef readonly align 8 dereferenceable(32) %_1.1) unnamed_addr #1 { 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:248'1     ?                                                                                                                    possible intended match
           526: start: 
check:248'0     ~~~~~~~
           527:  ret void 
check:248'0     ~~~~~~~~~~
           528: } 
check:248'0     ~~
           529:  
check:248'0     ~
           530: ; Function Attrs: uwtable 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           531: define void @trait_box(ptr noalias noundef nonnull align 1 %0, ptr noalias noundef readonly align 8 dereferenceable(32) %1) unnamed_addr #1 { 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           532: start: 
check:248'0     ~~~~~~~
           533:  %_1 = alloca [16 x i8], align 8 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           534:  store ptr %0, ptr %_1, align 8 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           535:  %2 = getelementptr inbounds i8, ptr %_1, i64 8 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           536:  store ptr %1, ptr %2, align 8 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           537: ; call core::ptr::drop_in_place<alloc::boxed::Box<dyn core::ops::drop::Drop+core::marker::Unpin>> 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           538:  call void @"_ZN4core3ptr99drop_in_place$LT$alloc..boxed..Box$LT$dyn$u20$core..ops..drop..Drop$u2b$core..marker..Unpin$GT$$GT$17h883b6015e27f4457E"(ptr noundef align 8 dereferenceable(16) %_1) 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           539:  ret void 
check:248'0     ~~~~~~~~~~
           540: } 
check:248'0     ~~
           541:  
check:248'0     ~
           542: ; Function Attrs: uwtable 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           543: define { ptr, ptr } @trait_option(ptr noalias noundef align 1 %x.0, ptr %x.1) unnamed_addr #1 { 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           544: start: 
check:248'0     ~~~~~~~
           545:  %0 = insertvalue { ptr, ptr } poison, ptr %x.0, 0 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           546:  %1 = insertvalue { ptr, ptr } %0, ptr %x.1, 1 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           547:  ret { ptr, ptr } %1 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~
           548: } 
check:248'0     ~~
           549:  
check:248'0     ~
           550: ; Function Attrs: uwtable 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           551: define { ptr, i64 } @return_slice(ptr noalias noundef nonnull readonly align 2 %x.0, i64 noundef %x.1) unnamed_addr #1 { 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           552: start: 
check:248'0     ~~~~~~~
           553:  %0 = insertvalue { ptr, i64 } poison, ptr %x.0, 0 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           554:  %1 = insertvalue { ptr, i64 } %0, i64 %x.1, 1 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           555:  ret { ptr, i64 } %1 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~
           556: } 
check:248'0     ~~
           557:  
check:248'0     ~
           558: ; Function Attrs: uwtable 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           559: define { i16, i16 } @enum_id_1(i16 noundef range(i16 0, 3) %x.0, i16 %x.1) unnamed_addr #1 { 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           560: start: 
check:248'0     ~~~~~~~
           561:  %0 = insertvalue { i16, i16 } poison, i16 %x.0, 0 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           562:  %1 = insertvalue { i16, i16 } %0, i16 %x.1, 1 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           563:  ret { i16, i16 } %1 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~
           564: } 
check:248'0     ~~
           565:  
check:248'0     ~
           566: ; Function Attrs: uwtable 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           567: define { i1, i8 } @enum_id_2(i1 noundef zeroext %x.0, i8 %x.1) unnamed_addr #1 { 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           568: start: 
check:248'0     ~~~~~~~
           569:  %0 = insertvalue { i1, i8 } poison, i1 %x.0, 0 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           570:  %1 = insertvalue { i1, i8 } %0, i8 %x.1, 1 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           571:  ret { i1, i8 } %1 
check:248'0     ~~~~~~~~~~~~~~~~~~~
           572: } 
check:248'0     ~~
           573:  
check:248'0     ~
           574: ; Function Attrs: nounwind uwtable 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           575: declare noundef range(i32 0, 10) i32 @rust_eh_personality(i32 noundef, i32 noundef, i64 noundef, ptr noundef, ptr noundef) unnamed_addr #2 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           576:  
check:248'0     ~
           577: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           578: declare void @llvm.assume(i1 noundef) #3 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           579:  
check:248'0     ~
           580: ; core::panicking::panic_in_cleanup 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           581: ; Function Attrs: cold minsize noinline noreturn nounwind optsize uwtable 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           582: declare void @_ZN4core9panicking16panic_in_cleanup17h8524614f71539403E() unnamed_addr #4 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           583:  
check:248'0     ~
           584: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           585: declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #5 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           586:  
check:248'0     ~
           587: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           588: declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #5 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           589:  
check:248'0     ~
           590: ; __rustc::__rust_dealloc 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           591: ; Function Attrs: nounwind allockind("free") uwtable 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           592: declare void @_RNvCsg4ZyMJhXvoL_7___rustc14___rust_dealloc(ptr allocptr noundef, i64 noundef, i64 noundef) unnamed_addr #6 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           593:  
check:248'0     ~
           594: ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write) 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           595: declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #7 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           596:  
check:248'0     ~
           597: ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           598: declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #8 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           599:  
check:248'0     ~
           600: attributes #0 = { inlinehint uwtable "frame-pointer"="non-leaf" "probe-stack"="inline-asm" "target-cpu"="generic" "target-features"="+v8a,+outline-atomics" } 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           601: attributes #1 = { uwtable "frame-pointer"="non-leaf" "probe-stack"="inline-asm" "target-cpu"="generic" "target-features"="+v8a,+outline-atomics" } 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           602: attributes #2 = { nounwind uwtable "frame-pointer"="non-leaf" "probe-stack"="inline-asm" "target-cpu"="generic" "target-features"="+v8a,+outline-atomics" } 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           603: attributes #3 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) } 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           604: attributes #4 = { cold minsize noinline noreturn nounwind optsize uwtable "frame-pointer"="non-leaf" "probe-stack"="inline-asm" "target-cpu"="generic" "target-features"="+v8a,+outline-atomics" } 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           605: attributes #5 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           606: attributes #6 = { nounwind allockind("free") uwtable "alloc-family"="__rust_alloc" "frame-pointer"="non-leaf" "probe-stack"="inline-asm" "target-cpu"="generic" "target-features"="+v8a,+outline-atomics" } 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           607: attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: write) } 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           608: attributes #8 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) } 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           609: attributes #9 = { cold } 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~
           610: attributes #10 = { cold noreturn nounwind } 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           611: attributes #11 = { nounwind } 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           612:  
check:248'0     ~
           613: !llvm.module.flags = !{!0} 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
           614: !llvm.ident = !{!1} 
check:248'0     ~~~~~~~~~~~~~~~~~~~~
           615:  
check:248'0     ~
           616: !0 = !{i32 8, !"PIC Level", i32 2} 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           617: !1 = !{!"rustc version 1.92.0-nightly (67fa2e77c 2025-09-21)"} 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           618: !2 = !{} 
check:248'0     ~~~~~~~~~
           619: !3 = !{i64 1} 
check:248'0     ~~~~~~~~~~~~~~
           620: !4 = !{i64 8} 
check:248'0     ~~~~~~~~~~~~~~
           621: !5 = !{i64 1, i64 -9223372036854775807} 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           622: !6 = !{i64 0, i64 -9223372036854775808} 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           623: !7 = !{i64 1, i64 0} 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~
>>>>>>

------------------------------------------

error: verification with 'FileCheck' failed
status: exit status: 1
command: "/usr/lib/llvm-20/bin/FileCheck" "--input-file" "/checkout/obj/build/aarch64-unknown-linux-gnu/test/codegen-llvm/function-arguments/function-arguments.ll" "/checkout/tests/codegen-llvm/function-arguments.rs" "--check-prefix=CHECK" "--allow-unused-prefixes" "--dump-input-context" "100"
stdout: none
--- stderr -------------------------------
/checkout/tests/codegen-llvm/function-arguments.rs:248:11: error: CHECK: expected string not found in input
// CHECK: @trait_raw(ptr noundef %_1.0, {{.+}} noalias noundef readonly align {{.*}} dereferenceable({{.*}}) %_1.1)
          ^
/checkout/obj/build/aarch64-unknown-linux-gnu/test/codegen-llvm/function-arguments/function-arguments.ll:519:73: note: scanning from here
define void @option_trait_borrow_mut(ptr noundef align 1 %x.0, ptr %x.1) unnamed_addr #1 {
                                                                        ^
/checkout/obj/build/aarch64-unknown-linux-gnu/test/codegen-llvm/function-arguments/function-arguments.ll:525:1: note: possible intended match here
define void @trait_raw(ptr noundef %_1.0, ptr noundef readonly align 8 dereferenceable(32) %_1.1) unnamed_addr #1 {
^

Input file: /checkout/obj/build/aarch64-unknown-linux-gnu/test/codegen-llvm/function-arguments/function-arguments.ll
Check file: /checkout/tests/codegen-llvm/function-arguments.rs

-dump-input=help explains the following input dump.

Input was:
<<<<<<
             .
             .
             .
           419: } 
           420:  
           421: ; Function Attrs: uwtable 
           422: define void @raw_struct(ptr noundef %_1) unnamed_addr #1 { 
           423: start: 
           424:  ret void 
           425: } 
           426:  
           427: ; Function Attrs: uwtable 
           428: define void @raw_option_nonnull_struct(ptr noundef %_1) unnamed_addr #1 { 
           429: start: 
           430:  ret void 
           431: } 
           432:  
           433: ; Function Attrs: uwtable 
           434: define noundef nonnull align 4 ptr @_box(ptr noalias noundef nonnull align 4 %x) unnamed_addr #1 { 
           435: start: 
           436:  ret ptr %x 
           437: } 
           438:  
           439: ; Function Attrs: uwtable 
           440: define void @_box_custom(ptr noundef nonnull align 4 %x.0, ptr noalias noundef nonnull readonly align 1 %x.1) unnamed_addr #1 { 
           441: start: 
           442:  %_2 = alloca [16 x i8], align 8 
           443:  call void @llvm.lifetime.start.p0(i64 16, ptr %_2) 
           444:  store ptr %x.0, ptr %_2, align 8 
           445:  %0 = getelementptr inbounds i8, ptr %_2, i64 8 
           446:  store ptr %x.1, ptr %0, align 8 
           447: ; call core::ptr::drop_in_place<alloc::boxed::Box<i32,&alloc::alloc::Global>> 
           448:  call void @"_ZN4core3ptr76drop_in_place$LT$alloc..boxed..Box$LT$i32$C$$RF$alloc..alloc..Global$GT$$GT$17h9a6db12582182d71E"(ptr noundef align 8 dereferenceable(16) %_2) 
           449:  call void @llvm.lifetime.end.p0(i64 16, ptr %_2) 
           450:  ret void 
           451: } 
           452:  
           453: ; Function Attrs: uwtable 
           454: define noundef nonnull align 4 ptr @notunpin_box(ptr noundef nonnull align 4 %x) unnamed_addr #1 { 
           455: start: 
           456:  ret ptr %x 
           457: } 
           458:  
           459: ; Function Attrs: uwtable 
           460: define void @struct_return(ptr dead_on_unwind noalias noundef writable sret([32 x i8]) align 4 dereferenceable(32) %_0) unnamed_addr #1 { 
           461: start: 
           462:  %_1 = alloca [32 x i8], align 4 
           463:  call void @llvm.lifetime.start.p0(i64 32, ptr %_1) 
           464:  call void @llvm.memset.p0.i64(ptr align 4 %_1, i8 0, i64 32, i1 false) 
           465:  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %_0, ptr align 4 %_1, i64 32, i1 false) 
           466:  call void @llvm.lifetime.end.p0(i64 32, ptr %_1) 
           467:  ret void 
           468: } 
           469:  
           470: ; Function Attrs: uwtable 
           471: define void @helper(i64 noundef %_1) unnamed_addr #1 { 
           472: start: 
           473:  ret void 
           474: } 
           475:  
           476: ; Function Attrs: uwtable 
           477: define void @slice(ptr noalias noundef nonnull readonly align 1 %_1.0, i64 noundef %_1.1) unnamed_addr #1 { 
           478: start: 
           479:  ret void 
           480: } 
           481:  
           482: ; Function Attrs: uwtable 
           483: define void @mutable_slice(ptr noalias noundef nonnull align 1 %_1.0, i64 noundef %_1.1) unnamed_addr #1 { 
           484: start: 
           485:  ret void 
           486: } 
           487:  
           488: ; Function Attrs: uwtable 
           489: define void @unsafe_slice(ptr noundef nonnull align 2 %_1.0, i64 noundef %_1.1) unnamed_addr #1 { 
           490: start: 
           491:  ret void 
           492: } 
           493:  
           494: ; Function Attrs: uwtable 
           495: define void @raw_slice(ptr noundef %_1.0, i64 noundef %_1.1) unnamed_addr #1 { 
           496: start: 
           497:  ret void 
           498: } 
           499:  
           500: ; Function Attrs: uwtable 
           501: define void @str(ptr noalias noundef nonnull readonly align 1 %_1.0, i64 noundef %_1.1) unnamed_addr #1 { 
           502: start: 
           503:  ret void 
           504: } 
           505:  
           506: ; Function Attrs: uwtable 
           507: define void @trait_borrow(ptr noundef nonnull align 1 %_1.0, ptr noalias noundef readonly align 8 dereferenceable(32) %_1.1) unnamed_addr #1 { 
           508: start: 
           509:  ret void 
           510: } 
           511:  
           512: ; Function Attrs: uwtable 
           513: define void @option_trait_borrow(ptr noundef align 1 %x.0, ptr %x.1) unnamed_addr #1 { 
           514: start: 
           515:  ret void 
           516: } 
           517:  
           518: ; Function Attrs: uwtable 
           519: define void @option_trait_borrow_mut(ptr noundef align 1 %x.0, ptr %x.1) unnamed_addr #1 { 
check:248'0                                                                             X~~~~~~~~~~~~~~~~~~ error: no match found
           520: start: 
check:248'0     ~~~~~~~
           521:  ret void 
check:248'0     ~~~~~~~~~~
           522: } 
check:248'0     ~~
           523:  
check:248'0     ~
           524: ; Function Attrs: uwtable 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           525: define void @trait_raw(ptr noundef %_1.0, ptr noundef readonly align 8 dereferenceable(32) %_1.1) unnamed_addr #1 { 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:248'1     ?                                                                                                                    possible intended match
           526: start: 
check:248'0     ~~~~~~~
           527:  ret void 
check:248'0     ~~~~~~~~~~
           528: } 
check:248'0     ~~
           529:  
check:248'0     ~
           530: ; Function Attrs: uwtable 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~
           531: define void @trait_box(ptr noalias noundef nonnull align 1 %0, ptr noalias noundef readonly align 8 dereferenceable(32) %1) unnamed_addr #1 { 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           532: start: 
check:248'0     ~~~~~~~
           533:  %_1 = alloca [16 x i8], align 8 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           534:  store ptr %0, ptr %_1, align 8 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           535:  %2 = getelementptr inbounds i8, ptr %_1, i64 8 
check:248'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

@rust-bors
Copy link

rust-bors bot commented Sep 22, 2025

☀️ Try build successful (CI)
Build commit: 8839836 (8839836d41c4dd94cf8cb8a652726d3b4918f5cf, parent: 7e4b8d702fedccc9c7803773a22c2e053ac3b004)

@saethlin
Copy link
Member

@rust-timer build 8839836

@rust-timer

This comment has been minimized.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (8839836): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

Next Steps: If you can justify the regressions found in this try perf run, please do so in sufficient writing along with @rustbot label: +perf-regression-triaged. If not, please fix the regressions and do another perf run. If its results are neutral or positive, the label will be automatically removed.

@bors rollup=never
@rustbot label: -S-waiting-on-perf +perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
1.1% [1.1%, 1.1%] 1
Regressions ❌
(secondary)
1.0% [0.1%, 5.8%] 8
Improvements ✅
(primary)
-0.3% [-0.9%, -0.1%] 30
Improvements ✅
(secondary)
-0.8% [-10.9%, -0.1%] 37
All ❌✅ (primary) -0.3% [-0.9%, 1.1%] 31

Max RSS (memory usage)

Results (primary -0.7%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
0.8% [0.7%, 0.9%] 2
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-3.6% [-3.6%, -3.6%] 1
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) -0.7% [-3.6%, 0.9%] 3

Cycles

Results (secondary 0.4%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
4.0% [3.4%, 5.3%] 6
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-5.0% [-8.2%, -2.3%] 4
All ❌✅ (primary) - - 0

Binary size

Results (primary -0.3%, secondary -0.8%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
0.2% [0.2%, 0.2%] 4
Regressions ❌
(secondary)
10.0% [10.0%, 10.0%] 1
Improvements ✅
(primary)
-0.4% [-1.1%, -0.1%] 39
Improvements ✅
(secondary)
-1.0% [-2.3%, -0.1%] 90
All ❌✅ (primary) -0.3% [-1.1%, 0.2%] 43

Bootstrap: 471.863s -> 471.5s (-0.08%)
Artifact size: 387.93 MiB -> 387.75 MiB (-0.05%)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
perf-regression Performance regression. S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants