https://github.com/hstk30-hw created 
https://github.com/llvm/llvm-project/pull/132772

Want to support SVE in big endian. Not sure how many bugs it has.  
`CreateVectorReverse` may not a correct api for REV, sleep :)



>From cbcd3d0cc0608ba0f1dc52e525bc8cf1c39aee9b Mon Sep 17 00:00:00 2001
From: hstk30 <hanwe...@huawei.com>
Date: Tue, 25 Mar 2025 00:22:41 +0800
Subject: [PATCH] [WIP][AArch64][SVE] Big endian support SVE

---
 clang/lib/CodeGen/TargetBuiltins/ARM.cpp | 6 +++++-
 clang/utils/TableGen/SveEmitter.cpp      | 4 ----
 2 files changed, 5 insertions(+), 5 deletions(-)

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";

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to