mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-25 00:24:26 +00:00
In inline asm treat indirect 'X' constraint as 'm'.
This may not be right in all cases, but it's better than asserting which it was doing before. PR 7528. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108268 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -5522,10 +5522,12 @@ void SelectionDAGBuilder::visitInlineAsm(ImmutableCallSite CS) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OpInfo.ConstraintType == TargetLowering::C_Other) {
|
// Treat indirect 'X' constraint as memory.
|
||||||
assert(!OpInfo.isIndirect &&
|
if (OpInfo.ConstraintType == TargetLowering::C_Other &&
|
||||||
"Don't know how to handle indirect other inputs yet!");
|
OpInfo.isIndirect)
|
||||||
|
OpInfo.ConstraintType = TargetLowering::C_Memory;
|
||||||
|
|
||||||
|
if (OpInfo.ConstraintType == TargetLowering::C_Other) {
|
||||||
std::vector<SDValue> Ops;
|
std::vector<SDValue> Ops;
|
||||||
TLI.LowerAsmOperandForConstraint(InOperandVal, OpInfo.ConstraintCode[0],
|
TLI.LowerAsmOperandForConstraint(InOperandVal, OpInfo.ConstraintCode[0],
|
||||||
Ops, DAG);
|
Ops, DAG);
|
||||||
|
18
test/CodeGen/X86/2010-07-13-indirectXconstraint.ll
Normal file
18
test/CodeGen/X86/2010-07-13-indirectXconstraint.ll
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s
|
||||||
|
; PR 7528
|
||||||
|
; formerly crashed
|
||||||
|
|
||||||
|
%0 = type { [12 x i16] }
|
||||||
|
%union..0anon = type { [3 x <1 x i64>] }
|
||||||
|
|
||||||
|
@gsm_H.1466 = internal constant %0 { [12 x i16] [i16 -134, i16 -374, i16 0, i16 2054, i16 5741, i16 8192, i16 5741, i16 2054, i16 0, i16 -374, i16 -134, i16 0] }, align 8 ; <%0*> [#uses=1]
|
||||||
|
|
||||||
|
define void @weighting_filter() nounwind ssp {
|
||||||
|
entry:
|
||||||
|
; CHECK: leaq _gsm_H.1466(%rip),%rax;
|
||||||
|
call void asm sideeffect "leaq $0,%rax;\0A", "*X,~{dirflag},~{fpsr},~{flags},~{memory},~{rax}"(%union..0anon* bitcast (%0* @gsm_H.1466 to %union..0anon*)) nounwind
|
||||||
|
br label %return
|
||||||
|
|
||||||
|
return: ; preds = %entry
|
||||||
|
ret void
|
||||||
|
}
|
Reference in New Issue
Block a user