diff --git a/llvm/lib/Target/AArch64/AArch64InstrAtomics.td b/llvm/lib/Target/AArch64/AArch64InstrAtomics.td --- a/llvm/lib/Target/AArch64/AArch64InstrAtomics.td +++ b/llvm/lib/Target/AArch64/AArch64InstrAtomics.td @@ -13,9 +13,8 @@ //===---------------------------------- // Atomic fences //===---------------------------------- -let AddedComplexity = 15, Size = 0 in -def CompilerBarrier : Pseudo<(outs), (ins i32imm:$ordering), - [(atomic_fence timm:$ordering, 0)]>, Sched<[]>; +let AddedComplexity = 15 in +def : Pat<(atomic_fence (timm), 0), (MEMBARRIER)>; def : Pat<(atomic_fence (i64 4), (timm)), (DMB (i32 0x9))>; def : Pat<(atomic_fence (timm), (timm)), (DMB (i32 0xb))>; diff --git a/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp b/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp --- a/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp +++ b/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp @@ -2351,8 +2351,7 @@ } case TargetOpcode::G_FENCE: { if (I.getOperand(1).getImm() == 0) - BuildMI(MBB, I, MIMetadata(I), TII.get(AArch64::CompilerBarrier)) - .addImm(I.getOperand(0).getImm()); + BuildMI(MBB, I, MIMetadata(I), TII.get(TargetOpcode::MEMBARRIER)); else BuildMI(MBB, I, MIMetadata(I), TII.get(AArch64::DMB)) .addImm(I.getOperand(0).getImm() == 4 ? 0x9 : 0xb); diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp --- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp +++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp @@ -337,12 +337,6 @@ } } - if (Opcode == AArch64::CompilerBarrier) { - O << '\t' << MAI.getCommentString() << " COMPILER BARRIER"; - printAnnotation(O, Annot); - return; - } - if (Opcode == AArch64::SPACE) { O << '\t' << MAI.getCommentString() << " SPACE " << MI->getOperand(1).getImm(); diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp --- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp +++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp @@ -677,9 +677,7 @@ return; } - if (MI.getOpcode() == AArch64::CompilerBarrier || - MI.getOpcode() == AArch64::SPACE) { - // CompilerBarrier just prevents the compiler from reordering accesses, and + if (MI.getOpcode() == AArch64::SPACE) { // SPACE just increases basic block size, in both cases no actual code. return; } diff --git a/llvm/lib/Target/ARM/ARMInstrInfo.td b/llvm/lib/Target/ARM/ARMInstrInfo.td --- a/llvm/lib/Target/ARM/ARMInstrInfo.td +++ b/llvm/lib/Target/ARM/ARMInstrInfo.td @@ -6486,13 +6486,7 @@ NoItinerary, []>, Sched<[]>; } -def CompilerBarrier : PseudoInst<(outs), (ins i32imm:$ordering), NoItinerary, - [(atomic_fence timm:$ordering, 0)]> { - let hasSideEffects = 1; - let Size = 0; - let AsmString = "@ COMPILER BARRIER"; - let hasNoSchedulingInfo = 1; -} +def : Pat<(atomic_fence (timm), 0), (MEMBARRIER)>; //===----------------------------------------------------------------------===// // Instructions used for emitting unwind opcodes on Windows. diff --git a/llvm/lib/Target/ARM/ARMScheduleA57.td b/llvm/lib/Target/ARM/ARMScheduleA57.td --- a/llvm/lib/Target/ARM/ARMScheduleA57.td +++ b/llvm/lib/Target/ARM/ARMScheduleA57.td @@ -119,8 +119,7 @@ "(t2|t)?HINT$", "(t)?HLT$", "(t2)?HVC$", "(t2)?ISB$", "ITasm$", "(t2)?RFE(DA|DB|IA|IB)", "(t)?SETEND", "(t2)?SETPAN", "(t2)?SMC", "SPACE", "(t2)?SRS(DA|DB|IA|IB)", "SWP(B)?", "t?TRAP", "(t2|t)?UDF$", "t2DCPS", "t2SG", - "t2TT", "tCPS", "CMP_SWAP", "t?SVC", "t2IT", "CompilerBarrier", - "t__brkdiv0")>; + "t2TT", "tCPS", "CMP_SWAP", "t?SVC", "t2IT", "t__brkdiv0")>; def : InstRW<[WriteNoop], (instregex "VMRS", "VMSR", "FMSTAT")>; diff --git a/llvm/test/CodeGen/AArch64/fence-singlethread.ll b/llvm/test/CodeGen/AArch64/fence-singlethread.ll --- a/llvm/test/CodeGen/AArch64/fence-singlethread.ll +++ b/llvm/test/CodeGen/AArch64/fence-singlethread.ll @@ -9,12 +9,12 @@ define void @fence_singlethread() { ; LINUX-LABEL: fence_singlethread: ; LINUX-NOT: dmb -; LINUX: // COMPILER BARRIER +; LINUX: //MEMBARRIER ; LINUX-NOT: dmb ; IOS-LABEL: fence_singlethread: ; IOS-NOT: dmb -; IOS: ; COMPILER BARRIER +; IOS: ;MEMBARRIER ; IOS-NOT: dmb fence syncscope("singlethread") seq_cst diff --git a/llvm/test/CodeGen/ARM/fence-singlethread.ll b/llvm/test/CodeGen/ARM/fence-singlethread.ll --- a/llvm/test/CodeGen/ARM/fence-singlethread.ll +++ b/llvm/test/CodeGen/ARM/fence-singlethread.ll @@ -8,7 +8,7 @@ define void @fence_singlethread() { ; CHECK-LABEL: fence_singlethread: ; CHECK-NOT: dmb -; CHECK: @ COMPILER BARRIER +; CHECK: @MEMBARRIER ; CHECK-NOT: dmb fence syncscope("singlethread") seq_cst