[PATCH] D84276: GlobalISel: Don't fail translate on intrinsics with metadata
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 27 16:09:22 PDT 2020
arsenm updated this revision to Diff 281075.
arsenm added a comment.
Apparently the metadata can be not MDNode in the unhandled constrained FP intrinsics
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D84276/new/
https://reviews.llvm.org/D84276
Files:
llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-metadata.ll
Index: llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-metadata.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-metadata.ll
@@ -0,0 +1,22 @@
+; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
+; RUN: llc -global-isel -march=amdgcn -mcpu=gfx900 -stop-after=irtranslator -o - %s | FileCheck %s
+; Make sure intrinsics with metadata arguments are translated
+
+define i32 @reloc_constant() {
+ ; CHECK-LABEL: name: reloc_constant
+ ; CHECK: bb.1 (%ir-block.0):
+ ; CHECK: liveins: $sgpr30_sgpr31
+ ; CHECK: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
+ ; CHECK: [[INT:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.reloc.constant), !0
+ ; CHECK: $vgpr0 = COPY [[INT]](s32)
+ ; CHECK: [[COPY1:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY]]
+ ; CHECK: S_SETPC_B64_return [[COPY1]], implicit $vgpr0
+ %val = call i32 @llvm.amdgcn.reloc.constant(metadata !0)
+ ret i32 %val
+}
+
+declare i32 @llvm.amdgcn.reloc.constant(metadata) #0
+
+attributes #0 = { nounwind readnone speculatable willreturn }
+
+!0 = !{!"arst"}
Index: llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
===================================================================
--- llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
+++ llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
@@ -1758,10 +1758,6 @@
MIB->copyIRFlags(CI);
for (auto &Arg : enumerate(CI.arg_operands())) {
- // Some intrinsics take metadata parameters. Reject them.
- if (isa<MetadataAsValue>(Arg.value()))
- return false;
-
// If this is required to be an immediate, don't materialize it in a
// register.
if (CI.paramHasAttr(Arg.index(), Attribute::ImmArg)) {
@@ -1774,6 +1770,11 @@
} else {
MIB.addFPImm(cast<ConstantFP>(Arg.value()));
}
+ } else if (auto MD = dyn_cast<MetadataAsValue>(Arg.value())) {
+ auto *MDN = dyn_cast<MDNode>(MD->getMetadata());
+ if (!MDN) // This was probably an MDString.
+ return false;
+ MIB.addMetadata(MDN);
} else {
ArrayRef<Register> VRegs = getOrCreateVRegs(*Arg.value());
if (VRegs.size() > 1)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D84276.281075.patch
Type: text/x-patch
Size: 2194 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200727/4d549f8e/attachment.bin>
More information about the llvm-commits
mailing list