[all-commits] [llvm/llvm-project] c1bb75: [PowerPC] Allow wa inline asm to also accept float...

Zarko Todorovski via All-commits all-commits at lists.llvm.org
Fri Jun 11 04:19:27 PDT 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: c1bb75febe9d1176748f524324b5528347342166
      https://github.com/llvm/llvm-project/commit/c1bb75febe9d1176748f524324b5528347342166
  Author: Zarko Todorovski <zarko at ca.ibm.com>
  Date:   2021-06-11 (Fri, 11 Jun 2021)

  Changed paths:
    M llvm/lib/Target/PowerPC/PPCISelLowering.cpp
    A llvm/test/CodeGen/PowerPC/wa-asm-fpr.ll

  Log Message:
  -----------
  [PowerPC] Allow wa inline asm to also accept floating point arguments

GCC documentation for the `wa` constraint states that:
```
wa

    A VSX register (VSR), vs0…vs63. This is either an FPR (vs0…vs31 are f0…f31)
    or a VR (vs32…vs63 are v0…v31).
```
This technically means that we could accept floating point parameters. In fact,
gcc itself does. The following testcase compiles and runs on all PPC platforms with GCC,
whereas clang/llc will assert:
```
#include <stdio.h>
double foo ( vector double a ) {
  double b, c;
  asm("xvabsdp  %x0, %x2        \n"
             "xxsldwi  %x1, %x0, %x0, 2 \n"
      :  "+wa"    (b),
         "=wa"    (c)
      :  "wa"    (a)
      );
  return b+c;
}
int main(void) {
  vector double a = {-3., -4.};
  double t = foo( a );
  printf("%g\n", t);
}
```
This patch allows clang/llc to build and run this testcase.

Reviewed By: nemanjai, #powerpc

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




More information about the All-commits mailing list