mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Mark vastart_save_xmm_regs as changing EFLAGS
The vastart_save_xmm_regs pseudo-instruction expands to a test and a branch, so it modifies EFLAGS. Mark it so, or else the scheduler might place it in the middle of another test+branch. This fixes a bug exposed by r192750, which turned on the MI Scheduler for X86. <rdar://problem/15627766> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197469 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
16d0e126aa
commit
608e4a390c
@ -72,7 +72,7 @@ def ADJCALLSTACKUP64 : I<0, Pseudo, (outs), (ins i32imm:$amt1, i32imm:$amt2),
|
|||||||
|
|
||||||
|
|
||||||
// x86-64 va_start lowering magic.
|
// x86-64 va_start lowering magic.
|
||||||
let usesCustomInserter = 1 in {
|
let usesCustomInserter = 1, Defs = [EFLAGS] in {
|
||||||
def VASTART_SAVE_XMM_REGS : I<0, Pseudo,
|
def VASTART_SAVE_XMM_REGS : I<0, Pseudo,
|
||||||
(outs),
|
(outs),
|
||||||
(ins GR8:$al,
|
(ins GR8:$al,
|
||||||
|
23
test/CodeGen/X86/vastart-defs-eflags.ll
Normal file
23
test/CodeGen/X86/vastart-defs-eflags.ll
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
; RUN: llc %s -o - | FileCheck %s
|
||||||
|
|
||||||
|
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
||||||
|
target triple = "x86_64-apple-macosx10.10.0"
|
||||||
|
|
||||||
|
; Check that vastart handling doesn't get between testb and je for the branch.
|
||||||
|
define i32 @check_flag(i32 %flags, ...) nounwind {
|
||||||
|
entry:
|
||||||
|
; CHECK: {{^}} testb $2, %bh
|
||||||
|
; CHECK-NOT: test
|
||||||
|
; CHECK: {{^}} je
|
||||||
|
%and = and i32 %flags, 512
|
||||||
|
%tobool = icmp eq i32 %and, 0
|
||||||
|
br i1 %tobool, label %if.end, label %if.then
|
||||||
|
|
||||||
|
if.then: ; preds = %entry
|
||||||
|
br label %if.end
|
||||||
|
|
||||||
|
if.end: ; preds = %entry, %if.then
|
||||||
|
%hasflag = phi i32 [ 1, %if.then ], [ 0, %entry ]
|
||||||
|
ret i32 %hasflag
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user