[inline-asm]No error for conflict between inputs\outputs and clobber list

Updated test according to commit 290539:

According to extended asm syntax, a case where the clobber list includes a variable from the inputs or outputs should be an error - conflict.
for example:

const long double a = 0.0;
int main()
{

char b;
double t1 = a;
__asm__ ("fucompp": "=a" (b) : "u" (t1), "t" (t1) : "cc", "st", "st(1)");

return 0;
}

This should conflict with the output - t1 which is st, and st which is st aswell.
The patch fixes it.

Commit on behald of Ziv Izhar.

Differential Revision: https://reviews.llvm.org/D15075

llvm-svn: 290540
This commit is contained in:
Marina Yatsina 2016-12-26 12:24:49 +00:00
parent c42fd03bf8
commit 168b954611
1 changed files with 2 additions and 2 deletions

View File

@ -62,7 +62,7 @@ template<> Type asm_read<Type>(Type *ptr) { \
__asm__("rep " Movs " \n\t" \ __asm__("rep " Movs " \n\t" \
: \ : \
: "D"(dst), "S"(src), "c"(size) \ : "D"(dst), "S"(src), "c"(size) \
: "rsi", "rdi", "rcx", "memory"); \ : "memory"); \
} }
DECLARE_ASM_WRITE(U8, "8", "movq", "r"); DECLARE_ASM_WRITE(U8, "8", "movq", "r");
@ -104,7 +104,7 @@ template<> Type asm_read<Type>(Type *ptr) { \
__asm__("rep " Movs " \n\t" \ __asm__("rep " Movs " \n\t" \
: \ : \
: "D"(dst), "S"(src), "c"(size) \ : "D"(dst), "S"(src), "c"(size) \
: "esi", "edi", "ecx", "memory"); \ : "memory"); \
} }
} // End of anonymous namespace } // End of anonymous namespace