[llvm] [SPARC] Emit a TRUNCATE when combining truncating BSWAP-STOREs (PR #210483)
Sergei Barannikov via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 18 15:08:59 PDT 2026
================
@@ -667,4 +801,149 @@ define void @u64_bswapstore_misaligned(ptr %0, i64 %1) #0 {
ret void
}
+define void @u16_bswapstore_extended(ptr %0, i16 %1) #0 {
+; SPARC32-LABEL: u16_bswapstore_extended:
+; SPARC32: ! %bb.0:
+; SPARC32-NEXT: add %sp, -96, %sp
+; SPARC32-NEXT: add %sp, 92, %o2
+; SPARC32-NEXT: sta %o1, [%o2] #ASI_P_L
+; SPARC32-NEXT: lduh [%sp+92], %o1
+; SPARC32-NEXT: st %o1, [%o0]
+; SPARC32-NEXT: retl
+; SPARC32-NEXT: add %sp, 96, %sp
+;
+; SPARCEL-LABEL: u16_bswapstore_extended:
+; SPARCEL: ! %bb.0:
+; SPARCEL-NEXT: add %sp, -96, %sp
+; SPARCEL-NEXT: add %sp, 92, %o2
+; SPARCEL-NEXT: sta %o1, [%o2] #ASI_P
+; SPARCEL-NEXT: or %o2, 2, %o1
+; SPARCEL-NEXT: lduh [%o1], %o1
+; SPARCEL-NEXT: st %o1, [%o0]
+; SPARCEL-NEXT: retl
+; SPARCEL-NEXT: add %sp, 96, %sp
+;
+; SPARC64-LABEL: u16_bswapstore_extended:
+; SPARC64: ! %bb.0:
+; SPARC64-NEXT: add %sp, -144, %sp
+; SPARC64-NEXT: add %sp, 2187, %o2
+; SPARC64-NEXT: sta %o1, [%o2] #ASI_P_L
+; SPARC64-NEXT: lduh [%sp+2187], %o1
+; SPARC64-NEXT: st %o1, [%o0]
+; SPARC64-NEXT: retl
+; SPARC64-NEXT: add %sp, 144, %sp
+ %3 = tail call i16 @llvm.bswap.i16(i16 %1)
+ %4 = zext i16 %3 to i32
+ store i32 %4, ptr %0, align 4
+ ret void
+}
+
+define void @u32_bswapstore_extended(ptr %0, i32 %1) #0 {
+; SPARC32-LABEL: u32_bswapstore_extended:
+; SPARC32: ! %bb.0:
+; SPARC32-NEXT: add %sp, -96, %sp
+; SPARC32-NEXT: add %sp, 92, %o2
+; SPARC32-NEXT: sta %o1, [%o2] #ASI_P_L
+; SPARC32-NEXT: ld [%sp+92], %o3
----------------
s-barannikov wrote:
I'm probably missing something, why is %o3 unused?..
https://github.com/llvm/llvm-project/pull/210483
More information about the llvm-commits
mailing list