[PATCH] D17349: ARM: fix VFP asm constraints
JF Bastien via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 18 11:11:49 PST 2016
jfb added a comment.
Added a test.
Constraint validation is lacking in LLVM: it doesn't check that the input variable matches the constraint. I do pass `mfpmath vfp` to the test in case this gets fixed, but it's not strictly necessary right now.
The following is currently accepted:
int oops(int x) { // CHECK-LABEL: @oops(
// CHECK: call float asm "vsqrt.f32 $0, $1", "=t,t"(float
__asm__("vsqrt.f32 %0, %1"
: "=t"(x)
: "t"(x));
return x;
}
Bitcode:
define arm_aapcscc i32 @oops(i32 %x) #1 {
%1 = alloca i32, align 4
store i32 %x, i32* %1, align 4
%2 = load i32, i32* %1, align 4
%3 = call i32 asm "vsqrt.f32 $0, $1", "=t,t"(i32 %2) #2, !srcloc !7
store i32 %3, i32* %1, align 4
%4 = load i32, i32* %1, align 4
ret i32 %4
}
Here's a fun GCC comparison <https://goo.gl/mwYkIh>, which is also surprising in a different way.
Fixing this would be an entirely different patch.
http://reviews.llvm.org/D17349
More information about the cfe-commits
mailing list