forked from OSchip/llvm-project
[inline asm][gcc-compatiblity] "=i" output constraint support
Ignore ‘i’,’n’,’E’,’F’ as output constraints in inline assembly (gcc compatibility) Differential Revision: https://reviews.llvm.org/D31383 llvm-svn: 306297
This commit is contained in:
parent
0ad0e5802b
commit
33eb775265
|
@ -507,6 +507,11 @@ bool TargetInfo::validateOutputConstraint(ConstraintInfo &Info) const {
|
|||
case '?': // Disparage slightly code.
|
||||
case '!': // Disparage severely.
|
||||
case '*': // Ignore for choosing register preferences.
|
||||
case 'i': // Ignore i,n,E,F as output constraints (match from the other
|
||||
// chars)
|
||||
case 'n':
|
||||
case 'E':
|
||||
case 'F':
|
||||
break; // Pass them.
|
||||
}
|
||||
|
||||
|
|
|
@ -160,6 +160,41 @@ double test15() {
|
|||
return ret;
|
||||
}
|
||||
|
||||
void iOutputConstraint(int x){
|
||||
__asm ("nop" : "=ir" (x) : :); // no-error
|
||||
__asm ("nop" : "=ri" (x) : :); // no-error
|
||||
__asm ("nop" : "=ig" (x) : :); // no-error
|
||||
__asm ("nop" : "=im" (x) : :); // no-error
|
||||
__asm ("nop" : "=imr" (x) : :); // no-error
|
||||
__asm ("nop" : "=i" (x) : :); // expected-error{{invalid output constraint '=i' in asm}}
|
||||
__asm ("nop" : "+i" (x) : :); // expected-error{{invalid output constraint '+i' in asm}}
|
||||
__asm ("nop" : "=ii" (x) : :); // expected-error{{invalid output constraint '=ii' in asm}}
|
||||
__asm ("nop" : "=nr" (x) : :); // no-error
|
||||
__asm ("nop" : "=rn" (x) : :); // no-error
|
||||
__asm ("nop" : "=ng" (x) : :); // no-error
|
||||
__asm ("nop" : "=nm" (x) : :); // no-error
|
||||
__asm ("nop" : "=nmr" (x) : :); // no-error
|
||||
__asm ("nop" : "=n" (x) : :); // expected-error{{invalid output constraint '=n' in asm}}
|
||||
__asm ("nop" : "+n" (x) : :); // expected-error{{invalid output constraint '+n' in asm}}
|
||||
__asm ("nop" : "=nn" (x) : :); // expected-error{{invalid output constraint '=nn' in asm}}
|
||||
__asm ("nop" : "=Fr" (x) : :); // no-error
|
||||
__asm ("nop" : "=rF" (x) : :); // no-error
|
||||
__asm ("nop" : "=Fg" (x) : :); // no-error
|
||||
__asm ("nop" : "=Fm" (x) : :); // no-error
|
||||
__asm ("nop" : "=Fmr" (x) : :); // no-error
|
||||
__asm ("nop" : "=F" (x) : :); // expected-error{{invalid output constraint '=F' in asm}}
|
||||
__asm ("nop" : "+F" (x) : :); // expected-error{{invalid output constraint '+F' in asm}}
|
||||
__asm ("nop" : "=FF" (x) : :); // expected-error{{invalid output constraint '=FF' in asm}}
|
||||
__asm ("nop" : "=Er" (x) : :); // no-error
|
||||
__asm ("nop" : "=rE" (x) : :); // no-error
|
||||
__asm ("nop" : "=Eg" (x) : :); // no-error
|
||||
__asm ("nop" : "=Em" (x) : :); // no-error
|
||||
__asm ("nop" : "=Emr" (x) : :); // no-error
|
||||
__asm ("nop" : "=E" (x) : :); // expected-error{{invalid output constraint '=E' in asm}}
|
||||
__asm ("nop" : "+E" (x) : :); // expected-error{{invalid output constraint '+E' in asm}}
|
||||
__asm ("nop" : "=EE" (x) : :); // expected-error{{invalid output constraint '=EE' in asm}}
|
||||
}
|
||||
|
||||
// PR19837
|
||||
struct foo {
|
||||
int a;
|
||||
|
|
Loading…
Reference in New Issue