mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-03 13:31:05 +00:00
[X86] Mark pseudo instruction TEST8ri_NOEREX as hasSIdeEffects=0.
Also, add a case clause in X86InstrInfo::shouldScheduleAdjacent to enable macro-fusion. <rdar://problem/15680770> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212747 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b5a006e88f
commit
60079c18bc
@ -1278,8 +1278,10 @@ let isCompare = 1 in {
|
||||
def TEST64mi32 : BinOpMI_F<"test", Xi64, X86testpat, MRM0m, 0xF6>;
|
||||
|
||||
// When testing the result of EXTRACT_SUBREG sub_8bit_hi, make sure the
|
||||
// register class is constrained to GR8_NOREX.
|
||||
let isPseudo = 1 in
|
||||
// register class is constrained to GR8_NOREX. This pseudo is explicitly
|
||||
// marked side-effect free, since it doesn't have an isel pattern like
|
||||
// other test instructions.
|
||||
let isPseudo = 1, hasSideEffects = 0 in
|
||||
def TEST8ri_NOREX : I<0, Pseudo, (outs), (ins GR8_NOREX:$src, i8imm:$mask),
|
||||
"", [], IIC_BIN_NONMEM>, Sched<[WriteALU]>;
|
||||
} // Defs = [EFLAGS]
|
||||
|
@ -5037,6 +5037,7 @@ bool X86InstrInfo::shouldScheduleAdjacent(MachineInstr* First,
|
||||
case X86::TEST16rm:
|
||||
case X86::TEST32rm:
|
||||
case X86::TEST64rm:
|
||||
case X86::TEST8ri_NOREX:
|
||||
case X86::AND16i16:
|
||||
case X86::AND16ri:
|
||||
case X86::AND16ri8:
|
||||
|
20
test/CodeGen/X86/testb-je-fusion.ll
Normal file
20
test/CodeGen/X86/testb-je-fusion.ll
Normal file
@ -0,0 +1,20 @@
|
||||
; RUN: llc < %s -march=x86-64 -mcpu=corei7-avx | FileCheck %s
|
||||
|
||||
; testb should be scheduled right before je to enable macro-fusion.
|
||||
|
||||
; CHECK: testb $2, %{{[abcd]}}h
|
||||
; CHECK-NEXT: je
|
||||
|
||||
define i32 @check_flag(i32 %flags, ...) nounwind {
|
||||
entry:
|
||||
%and = and i32 %flags, 512
|
||||
%tobool = icmp eq i32 %and, 0
|
||||
br i1 %tobool, label %if.end, label %if.then
|
||||
|
||||
if.then:
|
||||
br label %if.end
|
||||
|
||||
if.end:
|
||||
%hasflag = phi i32 [ 1, %if.then ], [ 0, %entry ]
|
||||
ret i32 %hasflag
|
||||
}
|
Loading…
Reference in New Issue
Block a user