[clang] [WIP][AArch64][SVE] Big endian support SVE (PR #132772)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 24 09:28:33 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: None (hstk30-hw)
<details>
<summary>Changes</summary>
Want to support SVE in big endian. Not sure how many bugs it has. `CreateVectorReverse` may not a correct api for REV, sleep :)
---
Full diff: https://github.com/llvm/llvm-project/pull/132772.diff
2 Files Affected:
- (modified) clang/lib/CodeGen/TargetBuiltins/ARM.cpp (+5-1)
- (modified) clang/utils/TableGen/SveEmitter.cpp (-4)
``````````diff
diff --git a/clang/lib/CodeGen/TargetBuiltins/ARM.cpp b/clang/lib/CodeGen/TargetBuiltins/ARM.cpp
index fd44f4ce47b5b..f488304dfe4b0 100644
--- a/clang/lib/CodeGen/TargetBuiltins/ARM.cpp
+++ b/clang/lib/CodeGen/TargetBuiltins/ARM.cpp
@@ -4366,7 +4366,11 @@ Value *CodeGenFunction::EmitSVEReinterpret(Value *Val, llvm::Type *Ty) {
return Tuple;
}
- return Builder.CreateBitCast(Val, Ty);
+ Value *Res = Builder.CreateBitCast(Val, Ty);
+ if (getTarget().isBigEndian())
+ Res = Builder.CreateVectorReverse(Res, "sve.reinterpret");
+
+ return Res;
}
static void InsertExplicitZeroOperand(CGBuilderTy &Builder, llvm::Type *Ty,
diff --git a/clang/utils/TableGen/SveEmitter.cpp b/clang/utils/TableGen/SveEmitter.cpp
index e226987b4844b..1aec2368ad330 100644
--- a/clang/utils/TableGen/SveEmitter.cpp
+++ b/clang/utils/TableGen/SveEmitter.cpp
@@ -1306,10 +1306,6 @@ void SVEEmitter::createHeader(raw_ostream &OS) {
OS << "#ifndef __ARM_SVE_H\n";
OS << "#define __ARM_SVE_H\n\n";
- OS << "#if !defined(__LITTLE_ENDIAN__)\n";
- OS << "#error \"Big endian is currently not supported for arm_sve.h\"\n";
- OS << "#endif\n";
-
OS << "#include <stdint.h>\n\n";
OS << "#ifdef __cplusplus\n";
OS << "extern \"C\" {\n";
``````````
</details>
https://github.com/llvm/llvm-project/pull/132772
More information about the cfe-commits
mailing list