[llvm] 419c92a - [GlobalISel][InlineAsm] Fix matching input constraints to mem operand
Petar Avramovic via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 8 03:33:00 PDT 2020
Author: Petar Avramovic
Date: 2020-07-08T12:32:17+02:00
New Revision: 419c92a749294a22a3deaa22719094ebd4e70568
URL: https://github.com/llvm/llvm-project/commit/419c92a749294a22a3deaa22719094ebd4e70568
DIFF: https://github.com/llvm/llvm-project/commit/419c92a749294a22a3deaa22719094ebd4e70568.diff
LOG: [GlobalISel][InlineAsm] Fix matching input constraints to mem operand
Mark matching input constraint to mem operand as not supported.
Differential Revision: https://reviews.llvm.org/D83235
Added:
Modified:
llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp
llvm/test/CodeGen/AArch64/GlobalISel/arm64-fallback.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp b/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp
index 1950a4e8b763..241d5bace248 100644
--- a/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp
@@ -406,6 +406,18 @@ bool InlineAsmLowering::lowerInlineAsm(
InstFlagIdx += getNumOpRegs(*Inst, InstFlagIdx) + 1;
assert(getNumOpRegs(*Inst, InstFlagIdx) == 1 && "Wrong flag");
+ unsigned MatchedOperandFlag = Inst->getOperand(InstFlagIdx).getImm();
+ if (InlineAsm::isMemKind(MatchedOperandFlag)) {
+ LLVM_DEBUG(dbgs() << "Matching input constraint to mem operand not "
+ "supported. This should be target specific.\n");
+ return false;
+ }
+ if (!InlineAsm::isRegDefKind(MatchedOperandFlag) &&
+ !InlineAsm::isRegDefEarlyClobberKind(MatchedOperandFlag)) {
+ LLVM_DEBUG(dbgs() << "Unknown matching constraint\n");
+ return false;
+ }
+
// We want to tie input to register in next operand.
unsigned DefRegIdx = InstFlagIdx + 1;
Register Def = Inst->getOperand(DefRegIdx).getReg();
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-fallback.ll b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-fallback.ll
index 8287ab716a80..cf596c98d462 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-fallback.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-fallback.ll
@@ -244,6 +244,16 @@ define i8 @scalable_call(i8* %addr) #1 {
ret i8 %res
}
+; FALLBACK-WITH-REPORT-ERR: remark: <unknown>:0:0: unable to translate instruction{{.*}}asm_indirect_output
+; FALLBACK-WITH-REPORT-OUT-LABEL: asm_indirect_output
+define void @asm_indirect_output() {
+entry:
+ %ap = alloca i8*, align 8
+ %0 = load i8*, i8** %ap, align 8
+ call void asm sideeffect "", "=*r|m,0,~{memory}"(i8** %ap, i8* %0)
+ ret void
+}
+
attributes #1 = { "target-features"="+sve" }
declare <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 %pattern)
More information about the llvm-commits
mailing list