forked from OSchip/llvm-project
Use ptr_rc_tailcall instead of GR32_TC.
The getPointerRegClass() hook will return GR32_TC, or whatever is appropriate for the current function. Patch by Yiannis Tsiouris! llvm-svn: 156459
This commit is contained in:
parent
05b9dad1e6
commit
7e21d617ef
|
@ -1008,8 +1008,8 @@ def : Pat<(X86call (i64 texternalsym:$dst)),
|
|||
(CALL64pcrel32 texternalsym:$dst)>;
|
||||
|
||||
// tailcall stuff
|
||||
def : Pat<(X86tcret GR32_TC:$dst, imm:$off),
|
||||
(TCRETURNri GR32_TC:$dst, imm:$off)>,
|
||||
def : Pat<(X86tcret ptr_rc_tailcall:$dst, imm:$off),
|
||||
(TCRETURNri ptr_rc_tailcall:$dst, imm:$off)>,
|
||||
Requires<[In32BitMode]>;
|
||||
|
||||
// FIXME: This is disabled for 32-bit PIC mode because the global base
|
||||
|
|
|
@ -187,7 +187,7 @@ let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1,
|
|||
def TCRETURNdi : PseudoI<(outs),
|
||||
(ins i32imm_pcrel:$dst, i32imm:$offset, variable_ops), []>;
|
||||
def TCRETURNri : PseudoI<(outs),
|
||||
(ins GR32_TC:$dst, i32imm:$offset, variable_ops), []>;
|
||||
(ins ptr_rc_tailcall:$dst, i32imm:$offset, variable_ops), []>;
|
||||
let mayLoad = 1 in
|
||||
def TCRETURNmi : PseudoI<(outs),
|
||||
(ins i32mem_TC:$dst, i32imm:$offset, variable_ops), []>;
|
||||
|
@ -198,7 +198,7 @@ let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1,
|
|||
(ins i32imm_pcrel:$dst, variable_ops),
|
||||
"jmp\t$dst # TAILCALL",
|
||||
[], IIC_JMP_REL>;
|
||||
def TAILJMPr : I<0xFF, MRM4r, (outs), (ins GR32_TC:$dst, variable_ops),
|
||||
def TAILJMPr : I<0xFF, MRM4r, (outs), (ins ptr_rc_tailcall:$dst, variable_ops),
|
||||
"", [], IIC_JMP_REG>; // FIXME: Remove encoding when JIT is dead.
|
||||
let mayLoad = 1 in
|
||||
def TAILJMPm : I<0xFF, MRM4m, (outs), (ins i32mem_TC:$dst, variable_ops),
|
||||
|
|
|
@ -332,7 +332,7 @@ def i8mem_NOREX : Operand<i64> {
|
|||
}
|
||||
|
||||
// GPRs available for tailcall.
|
||||
// It represents GR64_TC or GR64_TCW64.
|
||||
// It represents GR32_TC, GR64_TC or GR64_TCW64.
|
||||
def ptr_rc_tailcall : PointerLikeRegClass<2>;
|
||||
|
||||
// Special i32mem for addresses of load folding tail calls. These are not
|
||||
|
@ -340,7 +340,8 @@ def ptr_rc_tailcall : PointerLikeRegClass<2>;
|
|||
// after callee-saved register are popped.
|
||||
def i32mem_TC : Operand<i32> {
|
||||
let PrintMethod = "printi32mem";
|
||||
let MIOperandInfo = (ops GR32_TC, i8imm, GR32_TC, i32imm, i8imm);
|
||||
let MIOperandInfo = (ops ptr_rc_tailcall, i8imm, ptr_rc_tailcall,
|
||||
i32imm, i8imm);
|
||||
let ParserMatchClass = X86Mem32AsmOperand;
|
||||
let OperandType = "OPERAND_MEMORY";
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue