Skip to content

Conversation

@tmiasko
Copy link
Contributor

@tmiasko tmiasko commented Oct 17, 2025

Previously copy propagation presumed that there is further unspecified distinction between move operands and copy operands in assignments and propagated moves from assignments into terminators. This is inconsistent with current operational semantics.

Turn moves into copies after copy propagation to preserve existing behavior.

Fixes #137936.
Fixes #146423.

r? @cjgillot

@rustbot
Copy link
Collaborator

rustbot commented Oct 17, 2025

Some changes occurred to MIR optimizations

cc @rust-lang/wg-mir-opt

@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 Oct 17, 2025
@tmiasko tmiasko changed the title Turns moves into copies after copy propagation Turn moves into copies after copy propagation Oct 17, 2025
@rust-log-analyzer

This comment has been minimized.

@tmiasko
Copy link
Contributor Author

tmiasko commented Oct 17, 2025

@bors2 try @rust-timer queue

@rust-timer

This comment has been minimized.

rust-bors bot added a commit that referenced this pull request Oct 17, 2025
Turn moves into copies after copy propagation
@rust-bors

This comment has been minimized.

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

rust-bors bot commented Oct 17, 2025

💥 Test timed out after 21600s

@tmiasko
Copy link
Contributor Author

tmiasko commented Oct 17, 2025

@bors try

rust-bors bot added a commit that referenced this pull request Oct 17, 2025
Turn moves into copies after copy propagation
@rust-bors

This comment has been minimized.

@rust-bors
Copy link

rust-bors bot commented Oct 17, 2025

☀️ Try build successful (CI)
Build commit: 09003ac (09003acc28104d3fbe9b443536d97a793f68ffde, parent: f46475914de626785090a05ae037578aaa119fc8)

@rust-timer

This comment has been minimized.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (09003ac): comparison URL.

Overall result: ❌ regressions - 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.2% [0.2%, 3.6%] 39
Regressions ❌
(secondary)
1.8% [0.3%, 10.1%] 21
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-0.1% [-0.1%, -0.1%] 1
All ❌✅ (primary) 1.2% [0.2%, 3.6%] 39

Max RSS (memory usage)

Results (primary 1.5%, secondary 4.1%)

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

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

Cycles

Results (primary -0.5%, secondary 5.5%)

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

mean range count
Regressions ❌
(primary)
1.6% [1.6%, 1.6%] 1
Regressions ❌
(secondary)
5.5% [3.5%, 8.9%] 4
Improvements ✅
(primary)
-2.6% [-2.6%, -2.6%] 1
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) -0.5% [-2.6%, 1.6%] 2

Binary size

Results (primary 0.7%, secondary 0.2%)

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

mean range count
Regressions ❌
(primary)
0.7% [0.0%, 3.3%] 63
Regressions ❌
(secondary)
0.2% [0.0%, 0.8%] 30
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 0.7% [0.0%, 3.3%] 63

Bootstrap: 475.372s -> 475.243s (-0.03%)
Artifact size: 390.39 MiB -> 390.39 MiB (0.00%)

@rustbot rustbot added perf-regression Performance regression. and removed S-waiting-on-perf Status: Waiting on a perf run to be completed. labels Oct 17, 2025
@tmiasko tmiasko marked this pull request as draft October 18, 2025 12:24
@rustbot rustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 18, 2025
@tmiasko tmiasko force-pushed the move-copy branch 2 times, most recently from 4ae2c39 to 391b45e Compare October 18, 2025 13:15
@tmiasko
Copy link
Contributor Author

tmiasko commented Oct 18, 2025

@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 Oct 18, 2025
Turn moves into copies after copy propagation
@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Oct 18, 2025
@rust-log-analyzer

This comment has been minimized.

@rust-bors
Copy link

rust-bors bot commented Oct 18, 2025

☀️ Try build successful (CI)
Build commit: 7379f8a (7379f8aba17ea8f4768f69397dd41637fc4b880c, parent: c8a31b780d5415358566a20b94912620a3f27067)

@rust-timer

This comment has been minimized.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (7379f8a): comparison URL.

Overall result: ❌ regressions - 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.5% [0.3%, 0.8%] 4
Regressions ❌
(secondary)
0.5% [0.5%, 0.6%] 2
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 0.5% [0.3%, 0.8%] 4

Max RSS (memory usage)

Results (primary -1.0%, secondary -2.6%)

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)
-1.0% [-1.1%, -1.0%] 2
Improvements ✅
(secondary)
-2.6% [-2.6%, -2.6%] 1
All ❌✅ (primary) -1.0% [-1.1%, -1.0%] 2

Cycles

Results (secondary -0.9%)

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)
2.2% [2.2%, 2.3%] 2
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-4.0% [-5.4%, -2.5%] 2
All ❌✅ (primary) - - 0

Binary size

Results (primary 0.3%, 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.3% [0.0%, 1.0%] 42
Regressions ❌
(secondary)
0.1% [0.1%, 0.2%] 9
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 0.3% [0.0%, 1.0%] 42

Bootstrap: 473.714s -> 472.872s (-0.18%)
Artifact size: 390.54 MiB -> 390.71 MiB (0.04%)

@rustbot rustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Oct 18, 2025
Previously copy propagation presumed that there is further unspecified
distinction between move operands and copy operands in assignments and
propagated moves from assignments into terminators. This is inconsistent
with current operational semantics.

Turn moves into copies after copy propagation to preserve existing behavior.

Fixes rust-lang#137936.
Fixes rust-lang#146423.
@tmiasko tmiasko marked this pull request as ready for review October 18, 2025 18:06
@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Oct 18, 2025
@cjgillot
Copy link
Contributor

Considering this fixes a miscompile, the perf regression is acceptable.
@bors r+

@bors
Copy link
Collaborator

bors commented Oct 30, 2025

📌 Commit 7383119 has been approved by cjgillot

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 30, 2025
bors added a commit that referenced this pull request Oct 30, 2025
Turn moves into copies after copy propagation

Previously copy propagation presumed that there is further unspecified distinction between move operands and copy operands in assignments and propagated moves from assignments into terminators. This is inconsistent with current operational semantics.

Turn moves into copies after copy propagation to preserve existing behavior.

Fixes #137936.
Fixes #146423.

r? `@cjgillot`
@bors
Copy link
Collaborator

bors commented Oct 30, 2025

⌛ Testing commit 7383119 with merge 2305c36...

@rust-log-analyzer
Copy link
Collaborator

The job x86_64-gnu-nopt 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/align-byval.rs#i686-windows stdout ----
------FileCheck stdout------------------------------

------FileCheck stderr------------------------------
/checkout/tests/codegen-llvm/align-byval.rs:140:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @force_align_4
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:33:2: note: 'next' match was here
 call void @force_align_4(ptr byval([20 x i8]) align 4 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:30:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:31:1: note: non-matching line after previous match is here
 %0 = alloca [20 x i8], align 4
^
/checkout/tests/codegen-llvm/align-byval.rs:148:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @natural_align_8
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:42:2: note: 'next' match was here
 call void @natural_align_8(ptr byval([24 x i8]) align 4 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:39:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:40:1: note: non-matching line after previous match is here
 %0 = alloca [24 x i8], align 8
^
/checkout/tests/codegen-llvm/align-byval.rs:156:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @force_align_8
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:51:2: note: 'next' match was here
 call void @force_align_8(ptr align 8 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:48:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:49:1: note: non-matching line after previous match is here
 %0 = alloca [24 x i8], align 8
^
/checkout/tests/codegen-llvm/align-byval.rs:164:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @lower_fa8
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:60:2: note: 'next' match was here
 call void @lower_fa8(ptr byval([24 x i8]) align 4 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:57:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:58:1: note: non-matching line after previous match is here
 %0 = alloca [24 x i8], align 8
^
/checkout/tests/codegen-llvm/align-byval.rs:172:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @wrapped_fa8
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:69:2: note: 'next' match was here
 call void @wrapped_fa8(ptr align 8 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:66:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:67:1: note: non-matching line after previous match is here
 %0 = alloca [24 x i8], align 8
^
/checkout/tests/codegen-llvm/align-byval.rs:180:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @transparent_fa8
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:78:2: note: 'next' match was here
 call void @transparent_fa8(ptr align 8 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:75:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:76:1: note: non-matching line after previous match is here
 %0 = alloca [24 x i8], align 8
^
/checkout/tests/codegen-llvm/align-byval.rs:188:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @force_align_16
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:87:2: note: 'next' match was here
 call void @force_align_16(ptr align 16 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:84:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:85:1: note: non-matching line after previous match is here
 %0 = alloca [80 x i8], align 16
^

Input file: /checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll
Check file: /checkout/tests/codegen-llvm/align-byval.rs

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

Input was:
<<<<<<
          1: ; ModuleID = 'align_byval.9946dc3cac1a96f8-cgu.0' 
          2: source_filename = "align_byval.9946dc3cac1a96f8-cgu.0" 
          3: target datalayout = "e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32-a:0:32-S32" 
          4: target triple = "i686-pc-windows-msvc" 
          5:  
          6: ; Function Attrs: nounwind uwtable 
          7: define void @call_na1(i8 %x.0, i8 %x.1) unnamed_addr #0 { 
          8: start: 
          9:  %0 = alloca [2 x i8], align 4 
         10:  store i8 %x.0, ptr %0, align 4 
         11:  %1 = getelementptr inbounds i8, ptr %0, i32 1 
         12:  store i8 %x.1, ptr %1, align 1 
         13:  call void @natural_align_1(ptr byval([2 x i8]) align 4 %0) #2 
         14:  ret void 
         15: } 
         16:  
         17: ; Function Attrs: nounwind uwtable 
         18: define void @call_na2(ptr align 2 %x) unnamed_addr #0 { 
         19: start: 
         20:  %0 = alloca [34 x i8], align 4 
         21:  %1 = alloca [34 x i8], align 2 
         22:  call void @llvm.memcpy.p0.p0.i32(ptr align 2 %1, ptr align 2 %x, i32 34, i1 false) 
         23:  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %0, ptr align 2 %1, i32 34, i1 false) 
         24:  call void @natural_align_2(ptr byval([34 x i8]) align 4 %0) #2 
         25:  ret void 
         26: } 
         27:  
         28: ; Function Attrs: nounwind uwtable 
         29: define void @call_fa4(ptr align 4 %x) unnamed_addr #0 { 
         30: start: 
         31:  %0 = alloca [20 x i8], align 4 
         32:  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %0, ptr align 4 %x, i32 20, i1 false) 
         33:  call void @force_align_4(ptr byval([20 x i8]) align 4 %0) #2 
next:140      !~~~~~~~~~~~~~~~~~~~~~~~                                      error: match on wrong line
         34:  ret void 
         35: } 
         36:  
         37: ; Function Attrs: nounwind uwtable 
         38: define void @call_na8(ptr align 8 %x) unnamed_addr #0 { 
         39: start: 
         40:  %0 = alloca [24 x i8], align 8 
         41:  call void @llvm.memcpy.p0.p0.i32(ptr align 8 %0, ptr align 8 %x, i32 24, i1 false) 
         42:  call void @natural_align_8(ptr byval([24 x i8]) align 4 %0) #2 
next:148      !~~~~~~~~~~~~~~~~~~~~~~~~~                                      error: match on wrong line
         43:  ret void 
         44: } 
         45:  
         46: ; Function Attrs: nounwind uwtable 
         47: define void @call_fa8(ptr align 8 %x) unnamed_addr #0 { 
         48: start: 
         49:  %0 = alloca [24 x i8], align 8 
         50:  call void @llvm.memcpy.p0.p0.i32(ptr align 8 %0, ptr align 8 %x, i32 24, i1 false) 
         51:  call void @force_align_8(ptr align 8 %0) #2 
next:156      !~~~~~~~~~~~~~~~~~~~~~~~                     error: match on wrong line
         52:  ret void 
         53: } 
         54:  
         55: ; Function Attrs: nounwind uwtable 
         56: define void @call_lfa8(ptr align 8 %x) unnamed_addr #0 { 
         57: start: 
         58:  %0 = alloca [24 x i8], align 8 
         59:  call void @llvm.memcpy.p0.p0.i32(ptr align 8 %0, ptr align 8 %x, i32 24, i1 false) 
         60:  call void @lower_fa8(ptr byval([24 x i8]) align 4 %0) #2 
next:164      !~~~~~~~~~~~~~~~~~~~                                      error: match on wrong line
         61:  ret void 
         62: } 
         63:  
         64: ; Function Attrs: nounwind uwtable 
         65: define void @call_wfa8(ptr align 8 %x) unnamed_addr #0 { 
         66: start: 
         67:  %0 = alloca [24 x i8], align 8 
         68:  call void @llvm.memcpy.p0.p0.i32(ptr align 8 %0, ptr align 8 %x, i32 24, i1 false) 
         69:  call void @wrapped_fa8(ptr align 8 %0) #2 
next:172      !~~~~~~~~~~~~~~~~~~~~~                     error: match on wrong line
         70:  ret void 
         71: } 
         72:  
         73: ; Function Attrs: nounwind uwtable 
         74: define void @call_tfa8(ptr align 8 %x) unnamed_addr #0 { 
         75: start: 
         76:  %0 = alloca [24 x i8], align 8 
         77:  call void @llvm.memcpy.p0.p0.i32(ptr align 8 %0, ptr align 8 %x, i32 24, i1 false) 
         78:  call void @transparent_fa8(ptr align 8 %0) #2 
next:180      !~~~~~~~~~~~~~~~~~~~~~~~~~                     error: match on wrong line
         79:  ret void 
         80: } 
         81:  
         82: ; Function Attrs: nounwind uwtable 
         83: define void @call_fa16(ptr align 16 %x) unnamed_addr #0 { 
         84: start: 
         85:  %0 = alloca [80 x i8], align 16 
         86:  call void @llvm.memcpy.p0.p0.i32(ptr align 16 %0, ptr align 16 %x, i32 80, i1 false) 
         87:  call void @force_align_16(ptr align 16 %0) #2 
next:188      !~~~~~~~~~~~~~~~~~~~~~~~~                      error: match on wrong line
         88:  ret void 
         89: } 
         90:  
         91: ; Function Attrs: nounwind uwtable 
         92: declare void @natural_align_1(ptr byval([2 x i8]) align 4) unnamed_addr #0 
         93:  
         94: ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) 
         95: declare void @llvm.memcpy.p0.p0.i32(ptr noalias writeonly captures(none), ptr noalias readonly captures(none), i32, i1 immarg) #1 
         96:  
         97: ; Function Attrs: nounwind uwtable 
         98: declare void @natural_align_2(ptr byval([34 x i8]) align 4) unnamed_addr #0 
         99:  
        100: ; Function Attrs: nounwind uwtable 
        101: declare void @force_align_4(ptr byval([20 x i8]) align 4) unnamed_addr #0 
        102:  
        103: ; Function Attrs: nounwind uwtable 
        104: declare void @natural_align_8(ptr byval([24 x i8]) align 4) unnamed_addr #0 
        105:  
        106: ; Function Attrs: nounwind uwtable 
        107: declare void @force_align_8(ptr align 8) unnamed_addr #0 
        108:  
        109: ; Function Attrs: nounwind uwtable 
        110: declare void @lower_fa8(ptr byval([24 x i8]) align 4) unnamed_addr #0 
        111:  
        112: ; Function Attrs: nounwind uwtable 
        113: declare void @wrapped_fa8(ptr align 8) unnamed_addr #0 
        114:  
        115: ; Function Attrs: nounwind uwtable 
        116: declare void @transparent_fa8(ptr align 8) unnamed_addr #0 
        117:  
        118: ; Function Attrs: nounwind uwtable 
        119: declare void @force_align_16(ptr align 16) unnamed_addr #0 
        120:  
        121: attributes #0 = { nounwind uwtable "target-cpu"="pentium4" } 
        122: attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) } 
        123: attributes #2 = { nounwind } 
        124:  
        125: !llvm.module.flags = !{!0} 
        126: !llvm.ident = !{!1} 
        127:  
        128: !0 = !{i32 8, !"PIC Level", i32 2} 
        129: !1 = !{!"rustc version 1.93.0-nightly (2305c364c 2025-10-30)"} 
>>>>>>

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

error in revision `i686-windows`: verification with 'FileCheck' failed
status: exit status: 1
command: "/checkout/obj/build/x86_64-unknown-linux-gnu/ci-llvm/bin/FileCheck" "--input-file" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll" "/checkout/tests/codegen-llvm/align-byval.rs" "--check-prefix=CHECK" "--check-prefix" "i686-windows" "--allow-unused-prefixes" "--dump-input-context" "100"
stdout: none
--- stderr -------------------------------
/checkout/tests/codegen-llvm/align-byval.rs:140:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @force_align_4
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:33:2: note: 'next' match was here
 call void @force_align_4(ptr byval([20 x i8]) align 4 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:30:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:31:1: note: non-matching line after previous match is here
 %0 = alloca [20 x i8], align 4
^
/checkout/tests/codegen-llvm/align-byval.rs:148:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @natural_align_8
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:42:2: note: 'next' match was here
 call void @natural_align_8(ptr byval([24 x i8]) align 4 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:39:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:40:1: note: non-matching line after previous match is here
 %0 = alloca [24 x i8], align 8
^
/checkout/tests/codegen-llvm/align-byval.rs:156:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @force_align_8
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:51:2: note: 'next' match was here
 call void @force_align_8(ptr align 8 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:48:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:49:1: note: non-matching line after previous match is here
 %0 = alloca [24 x i8], align 8
^
/checkout/tests/codegen-llvm/align-byval.rs:164:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @lower_fa8
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:60:2: note: 'next' match was here
 call void @lower_fa8(ptr byval([24 x i8]) align 4 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:57:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:58:1: note: non-matching line after previous match is here
 %0 = alloca [24 x i8], align 8
^
/checkout/tests/codegen-llvm/align-byval.rs:172:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @wrapped_fa8
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:69:2: note: 'next' match was here
 call void @wrapped_fa8(ptr align 8 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:66:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:67:1: note: non-matching line after previous match is here
 %0 = alloca [24 x i8], align 8
^
/checkout/tests/codegen-llvm/align-byval.rs:180:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @transparent_fa8
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:78:2: note: 'next' match was here
 call void @transparent_fa8(ptr align 8 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:75:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:76:1: note: non-matching line after previous match is here
 %0 = alloca [24 x i8], align 8
^
/checkout/tests/codegen-llvm/align-byval.rs:188:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @force_align_16
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:87:2: note: 'next' match was here
 call void @force_align_16(ptr align 16 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:84:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll:85:1: note: non-matching line after previous match is here
 %0 = alloca [80 x i8], align 16
^

Input file: /checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-windows/align-byval.ll
Check file: /checkout/tests/codegen-llvm/align-byval.rs

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

Input was:
<<<<<<
          1: ; ModuleID = 'align_byval.9946dc3cac1a96f8-cgu.0' 
          2: source_filename = "align_byval.9946dc3cac1a96f8-cgu.0" 
          3: target datalayout = "e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32-a:0:32-S32" 
          4: target triple = "i686-pc-windows-msvc" 
          5:  
          6: ; Function Attrs: nounwind uwtable 
          7: define void @call_na1(i8 %x.0, i8 %x.1) unnamed_addr #0 { 
          8: start: 
          9:  %0 = alloca [2 x i8], align 4 
         10:  store i8 %x.0, ptr %0, align 4 
         11:  %1 = getelementptr inbounds i8, ptr %0, i32 1 
         12:  store i8 %x.1, ptr %1, align 1 
         13:  call void @natural_align_1(ptr byval([2 x i8]) align 4 %0) #2 
         14:  ret void 
         15: } 
         16:  
         17: ; Function Attrs: nounwind uwtable 
         18: define void @call_na2(ptr align 2 %x) unnamed_addr #0 { 
         19: start: 
         20:  %0 = alloca [34 x i8], align 4 
         21:  %1 = alloca [34 x i8], align 2 
         22:  call void @llvm.memcpy.p0.p0.i32(ptr align 2 %1, ptr align 2 %x, i32 34, i1 false) 
         23:  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %0, ptr align 2 %1, i32 34, i1 false) 
         24:  call void @natural_align_2(ptr byval([34 x i8]) align 4 %0) #2 
         25:  ret void 
         26: } 
         27:  
         28: ; Function Attrs: nounwind uwtable 
         29: define void @call_fa4(ptr align 4 %x) unnamed_addr #0 { 
         30: start: 
         31:  %0 = alloca [20 x i8], align 4 
         32:  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %0, ptr align 4 %x, i32 20, i1 false) 
         33:  call void @force_align_4(ptr byval([20 x i8]) align 4 %0) #2 
next:140      !~~~~~~~~~~~~~~~~~~~~~~~                                      error: match on wrong line
         34:  ret void 
         35: } 
         36:  
         37: ; Function Attrs: nounwind uwtable 
         38: define void @call_na8(ptr align 8 %x) unnamed_addr #0 { 
         39: start: 
         40:  %0 = alloca [24 x i8], align 8 
         41:  call void @llvm.memcpy.p0.p0.i32(ptr align 8 %0, ptr align 8 %x, i32 24, i1 false) 
         42:  call void @natural_align_8(ptr byval([24 x i8]) align 4 %0) #2 
next:148      !~~~~~~~~~~~~~~~~~~~~~~~~~                                      error: match on wrong line
         43:  ret void 
         44: } 
         45:  
         46: ; Function Attrs: nounwind uwtable 
         47: define void @call_fa8(ptr align 8 %x) unnamed_addr #0 { 
         48: start: 
         49:  %0 = alloca [24 x i8], align 8 
         50:  call void @llvm.memcpy.p0.p0.i32(ptr align 8 %0, ptr align 8 %x, i32 24, i1 false) 
         51:  call void @force_align_8(ptr align 8 %0) #2 
next:156      !~~~~~~~~~~~~~~~~~~~~~~~                     error: match on wrong line
         52:  ret void 
         53: } 
         54:  
         55: ; Function Attrs: nounwind uwtable 
         56: define void @call_lfa8(ptr align 8 %x) unnamed_addr #0 { 
         57: start: 
         58:  %0 = alloca [24 x i8], align 8 
         59:  call void @llvm.memcpy.p0.p0.i32(ptr align 8 %0, ptr align 8 %x, i32 24, i1 false) 
         60:  call void @lower_fa8(ptr byval([24 x i8]) align 4 %0) #2 
next:164      !~~~~~~~~~~~~~~~~~~~                                      error: match on wrong line
         61:  ret void 
         62: } 
         63:  
         64: ; Function Attrs: nounwind uwtable 
         65: define void @call_wfa8(ptr align 8 %x) unnamed_addr #0 { 
         66: start: 
         67:  %0 = alloca [24 x i8], align 8 
         68:  call void @llvm.memcpy.p0.p0.i32(ptr align 8 %0, ptr align 8 %x, i32 24, i1 false) 
         69:  call void @wrapped_fa8(ptr align 8 %0) #2 
next:172      !~~~~~~~~~~~~~~~~~~~~~                     error: match on wrong line
         70:  ret void 
         71: } 
         72:  
         73: ; Function Attrs: nounwind uwtable 
         74: define void @call_tfa8(ptr align 8 %x) unnamed_addr #0 { 
         75: start: 
         76:  %0 = alloca [24 x i8], align 8 
         77:  call void @llvm.memcpy.p0.p0.i32(ptr align 8 %0, ptr align 8 %x, i32 24, i1 false) 
         78:  call void @transparent_fa8(ptr align 8 %0) #2 
next:180      !~~~~~~~~~~~~~~~~~~~~~~~~~                     error: match on wrong line
         79:  ret void 
         80: } 
         81:  
         82: ; Function Attrs: nounwind uwtable 
         83: define void @call_fa16(ptr align 16 %x) unnamed_addr #0 { 
         84: start: 
         85:  %0 = alloca [80 x i8], align 16 
         86:  call void @llvm.memcpy.p0.p0.i32(ptr align 16 %0, ptr align 16 %x, i32 80, i1 false) 
         87:  call void @force_align_16(ptr align 16 %0) #2 
next:188      !~~~~~~~~~~~~~~~~~~~~~~~~                      error: match on wrong line
         88:  ret void 
         89: } 
         90:  
         91: ; Function Attrs: nounwind uwtable 
         92: declare void @natural_align_1(ptr byval([2 x i8]) align 4) unnamed_addr #0 
         93:  
         94: ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) 
         95: declare void @llvm.memcpy.p0.p0.i32(ptr noalias writeonly captures(none), ptr noalias readonly captures(none), i32, i1 immarg) #1 
         96:  
         97: ; Function Attrs: nounwind uwtable 
         98: declare void @natural_align_2(ptr byval([34 x i8]) align 4) unnamed_addr #0 
         99:  
        100: ; Function Attrs: nounwind uwtable 
        101: declare void @force_align_4(ptr byval([20 x i8]) align 4) unnamed_addr #0 
        102:  
        103: ; Function Attrs: nounwind uwtable 
        104: declare void @natural_align_8(ptr byval([24 x i8]) align 4) unnamed_addr #0 
        105:  
        106: ; Function Attrs: nounwind uwtable 
        107: declare void @force_align_8(ptr align 8) unnamed_addr #0 
        108:  
        109: ; Function Attrs: nounwind uwtable 
        110: declare void @lower_fa8(ptr byval([24 x i8]) align 4) unnamed_addr #0 
        111:  
        112: ; Function Attrs: nounwind uwtable 
        113: declare void @wrapped_fa8(ptr align 8) unnamed_addr #0 
        114:  
        115: ; Function Attrs: nounwind uwtable 
        116: declare void @transparent_fa8(ptr align 8) unnamed_addr #0 
        117:  
        118: ; Function Attrs: nounwind uwtable 
        119: declare void @force_align_16(ptr align 16) unnamed_addr #0 
        120:  
        121: attributes #0 = { nounwind uwtable "target-cpu"="pentium4" } 
        122: attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) } 
        123: attributes #2 = { nounwind } 
        124:  
        125: !llvm.module.flags = !{!0} 
        126: !llvm.ident = !{!1} 
        127:  
        128: !0 = !{i32 8, !"PIC Level", i32 2} 
        129: !1 = !{!"rustc version 1.93.0-nightly (2305c364c 2025-10-30)"} 
>>>>>>
------------------------------------------

---- [codegen] tests/codegen-llvm/align-byval.rs#i686-windows stdout end ----
---- [codegen] tests/codegen-llvm/align-byval.rs#i686-linux stdout ----
------FileCheck stdout------------------------------

------FileCheck stderr------------------------------
/checkout/tests/codegen-llvm/align-byval.rs:140:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @force_align_4
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-linux/align-byval.ll:33:2: note: 'next' match was here
 call void @force_align_4(ptr byval([20 x i8]) align 4 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-linux/align-byval.ll:30:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-linux/align-byval.ll:31:1: note: non-matching line after previous match is here
 %0 = alloca [20 x i8], align 4
^
/checkout/tests/codegen-llvm/align-byval.rs:148:17: error: CHECK-NEXT: is not on the line after the previous match
 // CHECK-NEXT: call void @natural_align_8
                ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-linux/align-byval.ll:42:2: note: 'next' match was here
 call void @natural_align_8(ptr byval([24 x i8]) align 4 %0) #2
 ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-linux/align-byval.ll:39:7: note: previous match ended here
start:
      ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/align-byval.i686-linux/align-byval.ll:40:1: note: non-matching line after previous match is here

@bors
Copy link
Collaborator

bors commented Oct 30, 2025

💔 Test failed - checks-actions

@bors bors added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Oct 30, 2025
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.

Aliasing-related miscompile in CopyProp CopyProp miscompilation when src is moved more than once

7 participants