forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge 81204 from mainline (with minor tweak).
When remat'ing and destination virtual register has a sub-register index. Make sure the sub-register class matches the register class of the remat'ed instruction definition register class. git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_26@81270 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Showing
2 changed files
with
64 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
; RUN: llvm-as < %s | llc -triple=x86_64-unknown-freebsd7.2 -code-model=kernel | FileCheck %s | ||
; PR4689 | ||
|
||
%struct.__s = type { [8 x i8] } | ||
%struct.pcb = type { i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i16, i8* } | ||
%struct.pcpu = type { i32*, i32*, i32*, i32*, %struct.pcb*, i64, i32, i32, i32, i32 } | ||
|
||
define i64 @hammer_time(i64 %modulep, i64 %physfree) nounwind ssp noredzone noimplicitfloat { | ||
; CHECK: hammer_time: | ||
; CHECK: movq $Xrsvd, %rax | ||
; CHECK: movq $Xrsvd, %rdi | ||
; CHECK: movq $Xrsvd, %r8 | ||
entry: | ||
br i1 undef, label %if.then, label %if.end | ||
|
||
if.then: ; preds = %entry | ||
br label %if.end | ||
|
||
if.end: ; preds = %if.then, %entry | ||
br label %for.body | ||
|
||
for.body: ; preds = %for.inc, %if.end | ||
switch i32 undef, label %if.then76 [ | ||
i32 9, label %for.inc | ||
i32 10, label %for.inc | ||
i32 11, label %for.inc | ||
i32 12, label %for.inc | ||
] | ||
|
||
if.then76: ; preds = %for.body | ||
unreachable | ||
|
||
for.inc: ; preds = %for.body, %for.body, %for.body, %for.body | ||
br i1 undef, label %for.end, label %for.body | ||
|
||
for.end: ; preds = %for.inc | ||
call void asm sideeffect "mov $1,%gs:$0", "=*m,r,~{dirflag},~{fpsr},~{flags}"(%struct.__s* bitcast (%struct.pcb** getelementptr (%struct.pcpu* null, i32 0, i32 4) to %struct.__s*), i64 undef) nounwind | ||
br label %for.body170 | ||
|
||
for.body170: ; preds = %for.body170, %for.end | ||
store i64 or (i64 and (i64 or (i64 ptrtoint (void (i32, i32, i32, i32)* @Xrsvd to i64), i64 2097152), i64 2162687), i64 or (i64 or (i64 and (i64 shl (i64 ptrtoint (void (i32, i32, i32, i32)* @Xrsvd to i64), i64 32), i64 -281474976710656), i64 140737488355328), i64 15393162788864)), i64* undef | ||
br i1 undef, label %for.end175, label %for.body170 | ||
|
||
for.end175: ; preds = %for.body170 | ||
unreachable | ||
} | ||
|
||
declare void @Xrsvd(i32, i32, i32, i32) ssp noredzone noimplicitfloat |