mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-22 10:33:23 +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>;
|
def TEST64mi32 : BinOpMI_F<"test", Xi64, X86testpat, MRM0m, 0xF6>;
|
||||||
|
|
||||||
// When testing the result of EXTRACT_SUBREG sub_8bit_hi, make sure the
|
// When testing the result of EXTRACT_SUBREG sub_8bit_hi, make sure the
|
||||||
// register class is constrained to GR8_NOREX.
|
// register class is constrained to GR8_NOREX. This pseudo is explicitly
|
||||||
let isPseudo = 1 in
|
// 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),
|
def TEST8ri_NOREX : I<0, Pseudo, (outs), (ins GR8_NOREX:$src, i8imm:$mask),
|
||||||
"", [], IIC_BIN_NONMEM>, Sched<[WriteALU]>;
|
"", [], IIC_BIN_NONMEM>, Sched<[WriteALU]>;
|
||||||
} // Defs = [EFLAGS]
|
} // Defs = [EFLAGS]
|
||||||
|
@ -5037,6 +5037,7 @@ bool X86InstrInfo::shouldScheduleAdjacent(MachineInstr* First,
|
|||||||
case X86::TEST16rm:
|
case X86::TEST16rm:
|
||||||
case X86::TEST32rm:
|
case X86::TEST32rm:
|
||||||
case X86::TEST64rm:
|
case X86::TEST64rm:
|
||||||
|
case X86::TEST8ri_NOREX:
|
||||||
case X86::AND16i16:
|
case X86::AND16i16:
|
||||||
case X86::AND16ri:
|
case X86::AND16ri:
|
||||||
case X86::AND16ri8:
|
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…
x
Reference in New Issue
Block a user