[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