summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
index 37ac96e5290..e1cfb96e13c 100644
--- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
@@ -1523,6 +1523,21 @@ bool IRTranslator::translateKnownIntrinsic(const CallInst &CI, Intrinsic::ID ID,
case Intrinsic::sideeffect:
// Discard annotate attributes, assumptions, and artificial side-effects.
return true;
+ case Intrinsic::read_register: {
+ Value *Arg = CI.getArgOperand(0);
+ const Metadata *MD = cast<MetadataAsValue>(Arg)->getMetadata();
+ const MDString *RegStr = cast<MDString>(cast<MDNode>(MD)->getOperand(0));
+
+ auto *TLI = MF->getSubtarget().getTargetLowering();
+ Register Dst = getOrCreateVReg(CI);
+ EVT VT = TLI->getValueType(*DL, CI.getType());
+ Register Reg = TLI->getRegisterByName(RegStr->getString().data(), VT, *MF);
+ if (!Reg.isValid())
+ return false;
+
+ MIRBuilder.buildCopy(Dst, Reg);
+ return true;
+ }
}
return false;
}
OpenPOWER on IntegriCloud