[ARM] 't' asm constraint should accept i32
authorYi Kong <yikong@google.com>
Thu, 16 Nov 2017 23:38:17 +0000 (23:38 +0000)
committerYi Kong <yikong@google.com>
Thu, 16 Nov 2017 23:38:17 +0000 (23:38 +0000)
commit39bcd4ed3e5e824f363303077c98f54be61c3add
treea3ec8b5b237b489aefc541e499a22252143b0d4e
parent513fc069f00b3540eedab30ca188ab29bbcf4047
[ARM] 't' asm constraint should accept i32

't' constraint normally only accepts f32 operands, but for VCVT the
operands can be i32. LLVM is overly restrictive and rejects asm like:

  float foo() {
    float result;
    __asm__ __volatile__(
      "vcvt.f32.s32 %[result], %[arg1]\n"
      : [result]"=t"(result)
      : [arg1]"t"(0x01020304) );
    return result;
  }

Relax the value type for 't' constraint to either f32 or i32.

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

llvm-svn: 318472
llvm/lib/Target/ARM/ARMISelLowering.cpp
llvm/test/CodeGen/ARM/inlineasm.ll