summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2019-07-02 14:16:39 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2019-07-02 14:16:39 +0000
commitce690544a6c9aaa592b4aff3878b86762e753c78 (patch)
treef405d6ef684540f533ecb75741e14c20ed2537f7 /llvm/lib/CodeGen
parente7b2c64a6e4cb5ef0efdf4204977ff701027d7ae (diff)
downloadbcm5719-llvm-ce690544a6c9aaa592b4aff3878b86762e753c78.tar.gz
bcm5719-llvm-ce690544a6c9aaa592b4aff3878b86762e753c78.zip
GlobalISel: Add G_FENCE
The pattern importer is for some reason emitting checks for G_CONSTANT for the immediate operands. llvm-svn: 364926
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp8
-rw-r--r--llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp7
2 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
index 443ca730d55..96efcf7a373 100644
--- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
@@ -2029,6 +2029,14 @@ bool IRTranslator::translateAtomicRMW(const User &U,
return true;
}
+bool IRTranslator::translateFence(const User &U,
+ MachineIRBuilder &MIRBuilder) {
+ const FenceInst &Fence = cast<FenceInst>(U);
+ MIRBuilder.buildFence(static_cast<unsigned>(Fence.getOrdering()),
+ Fence.getSyncScopeID());
+ return true;
+}
+
void IRTranslator::finishPendingPhis() {
#ifndef NDEBUG
DILocationVerifier Verifier;
diff --git a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
index 00dce14fe07..4d6026ade86 100644
--- a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
@@ -851,6 +851,13 @@ MachineIRBuilder::buildAtomicRMWUmin(Register OldValRes, Register Addr,
}
MachineInstrBuilder
+MachineIRBuilder::buildFence(unsigned Ordering, unsigned Scope) {
+ return buildInstr(TargetOpcode::G_FENCE)
+ .addImm(Ordering)
+ .addImm(Scope);
+}
+
+MachineInstrBuilder
MachineIRBuilder::buildBlockAddress(Register Res, const BlockAddress *BA) {
#ifndef NDEBUG
assert(getMRI()->getType(Res).isPointer() && "invalid res type");
OpenPOWER on IntegriCloud