When a variable has a specified asm name, but isn't using the register storage class, the asm name doesn't specify a register. PR12244.
llvm-svn: 152873
This commit is contained in:
parent
dbe27e70a5
commit
6f87b44fe3
|
@ -1295,6 +1295,8 @@ AddVariableConstraints(const std::string &Constraint, const Expr &AsmExpr,
|
||||||
const VarDecl *Variable = dyn_cast<VarDecl>(&Value);
|
const VarDecl *Variable = dyn_cast<VarDecl>(&Value);
|
||||||
if (!Variable)
|
if (!Variable)
|
||||||
return Constraint;
|
return Constraint;
|
||||||
|
if (Variable->getStorageClass() != SC_Register)
|
||||||
|
return Constraint;
|
||||||
AsmLabelAttr *Attr = Variable->getAttr<AsmLabelAttr>();
|
AsmLabelAttr *Attr = Variable->getAttr<AsmLabelAttr>();
|
||||||
if (!Attr)
|
if (!Attr)
|
||||||
return Constraint;
|
return Constraint;
|
||||||
|
|
|
@ -57,3 +57,9 @@ unsigned long long foo2(unsigned long long addr, double a0,
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK: call i64 asm "call *$1", "={rax},r,{xmm0},{xmm1},{xmm2},{xmm3},{xmm4},{xmm5},{xmm6},{xmm7},~{dirflag},~{fpsr},~{flags}
|
// CHECK: call i64 asm "call *$1", "={rax},r,{xmm0},{xmm1},{xmm2},{xmm3},{xmm4},{xmm5},{xmm6},{xmm7},~{dirflag},~{fpsr},~{flags}
|
||||||
|
|
||||||
|
int randomvar asm("randomvar");
|
||||||
|
void foo3() {
|
||||||
|
asm("vartest %0" : : "r"(randomvar));
|
||||||
|
}
|
||||||
|
// CHECK: call void asm sideeffect "vartest $0", "r,~{dirflag},~{fpsr},~{flags}"
|
||||||
|
|
Loading…
Reference in New Issue