[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