forked from OSchip/llvm-project
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. llvm-svn: 108268
This commit is contained in:
parent
117b01b2da
commit
caca5488dc
|
@ -5522,10 +5522,12 @@ void SelectionDAGBuilder::visitInlineAsm(ImmutableCallSite CS) {
|
|||
break;
|
||||
}
|
||||
|
||||
if (OpInfo.ConstraintType == TargetLowering::C_Other) {
|
||||
assert(!OpInfo.isIndirect &&
|
||||
"Don't know how to handle indirect other inputs yet!");
|
||||
// Treat indirect 'X' constraint as memory.
|
||||
if (OpInfo.ConstraintType == TargetLowering::C_Other &&
|
||||
OpInfo.isIndirect)
|
||||
OpInfo.ConstraintType = TargetLowering::C_Memory;
|
||||
|
||||
if (OpInfo.ConstraintType == TargetLowering::C_Other) {
|
||||
std::vector<SDValue> Ops;
|
||||
TLI.LowerAsmOperandForConstraint(InOperandVal, OpInfo.ConstraintCode[0],
|
||||
Ops, DAG);
|
||||
|
|
|
@ -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
|
||||
}
|
Loading…
Reference in New Issue