forked from OSchip/llvm-project
[X86] Fix an old FIXME about folding the zero constant into the OR instruction we use for sequentially consistent fence in 32-bit mode without SSE2.
llvm-svn: 350013
This commit is contained in:
parent
dfb8a427ff
commit
3cc92a28ce
|
@ -25180,7 +25180,7 @@ static SDValue LowerATOMIC_FENCE(SDValue Op, const X86Subtarget &Subtarget,
|
|||
return DAG.getNode(X86ISD::MFENCE, dl, MVT::Other, Op.getOperand(0));
|
||||
|
||||
SDValue Chain = Op.getOperand(0);
|
||||
SDValue Zero = DAG.getConstant(0, dl, MVT::i32);
|
||||
SDValue Zero = DAG.getTargetConstant(0, dl, MVT::i32);
|
||||
SDValue Ops[] = {
|
||||
DAG.getRegister(X86::ESP, MVT::i32), // Base
|
||||
DAG.getTargetConstant(1, dl, MVT::i8), // Scale
|
||||
|
@ -25190,7 +25190,7 @@ static SDValue LowerATOMIC_FENCE(SDValue Op, const X86Subtarget &Subtarget,
|
|||
Zero,
|
||||
Chain
|
||||
};
|
||||
SDNode *Res = DAG.getMachineNode(X86::OR32mrLocked, dl, MVT::Other, Ops);
|
||||
SDNode *Res = DAG.getMachineNode(X86::OR32mi8Locked, dl, MVT::Other, Ops);
|
||||
return SDValue(Res, 0);
|
||||
}
|
||||
|
||||
|
|
|
@ -662,12 +662,11 @@ def : Pat<(v8f64 (X86cmov VR512:$t, VR512:$f, imm:$cond, EFLAGS)),
|
|||
|
||||
// Memory barriers
|
||||
|
||||
// TODO: Get this to fold the constant into the instruction.
|
||||
let isCodeGenOnly = 1, Defs = [EFLAGS] in
|
||||
def OR32mrLocked : I<0x09, MRMDestMem, (outs), (ins i32mem:$dst, GR32:$zero),
|
||||
"or{l}\t{$zero, $dst|$dst, $zero}", []>,
|
||||
Requires<[Not64BitMode]>, OpSize32, LOCK,
|
||||
Sched<[WriteALURMW]>;
|
||||
def OR32mi8Locked : Ii8<0x83, MRM1m, (outs), (ins i32mem:$dst, i32i8imm:$zero),
|
||||
"or{l}\t{$zero, $dst|$dst, $zero}", []>,
|
||||
Requires<[Not64BitMode]>, OpSize32, LOCK,
|
||||
Sched<[WriteALURMW]>;
|
||||
|
||||
let hasSideEffects = 1 in
|
||||
def Int_MemBarrier : I<0, Pseudo, (outs), (ins),
|
||||
|
|
|
@ -4,8 +4,7 @@
|
|||
define void @test() {
|
||||
; CHECK-LABEL: test:
|
||||
; CHECK: # %bb.0:
|
||||
; CHECK-NEXT: xorl %eax, %eax
|
||||
; CHECK-NEXT: lock orl %eax, (%esp)
|
||||
; CHECK-NEXT: lock orl $0, (%esp)
|
||||
; CHECK-NEXT: retl
|
||||
fence seq_cst
|
||||
ret void
|
||||
|
|
Loading…
Reference in New Issue