[GlobalISel][InlineAsm] Add early return for memory inputs that need to be indirectified

Summary:
D78319 introduced basic support for inline asm input operands in GlobalISel.
However, that patch did not handle the case where a memory input operand still needs to
be indirectified. Later code asserts that the memory operand is already indirect.

This patch adds an early return false to trigger the SelectionDAG fallback for now.

Reviewers: arsenm, paquette

Reviewed By: arsenm

Subscribers: thakis, wdng, rovka, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D79955
This commit is contained in:
Konstantin Schwarz 2020-05-15 10:13:53 +02:00
parent 1a3b801db5
commit 5425cdc3ad
2 changed files with 16 additions and 0 deletions

View File

@ -424,6 +424,13 @@ bool InlineAsmLowering::lowerInlineAsm(
}
if (OpInfo.ConstraintType == TargetLowering::C_Memory) {
if (!OpInfo.isIndirect) {
LLVM_DEBUG(dbgs()
<< "Cannot indirectify memory input operands yet\n");
return false;
}
assert(OpInfo.isIndirect && "Operand must be indirect to be a mem!");
unsigned ConstraintID =

View File

@ -210,3 +210,12 @@ define i64 @strict_align_feature(i64* %p) #0 {
}
attributes #0 = { "target-features"="+strict-align" }
; FALLBACK-WITH-REPORT-ERR: remark: <unknown>:0:0: unable to translate instruction: call
; FALLBACK-WITH-REPORT-ERR: warning: Instruction selection used fallback path for direct_mem
; FALLBACK-WITH-REPORT-OUT-LABEL: direct_mem
define void @direct_mem(i32 %x, i32 %y) {
entry:
tail call void asm sideeffect "", "imr,imr,~{memory}"(i32 %x, i32 %y)
ret void
}