[llvm] [ARM] Use REG_SEQUENCE instead of SUBREG_TO_REG for crypto patterns. NFCI. (PR #179910)

via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 5 03:18:23 PST 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-arm

Author: Jay Foad (jayfoad)

<details>
<summary>Changes</summary>

This removes the only uses of SUBREG_TO_REG in the ARM backend.


---
Full diff: https://github.com/llvm/llvm-project/pull/179910.diff


1 Files Affected:

- (modified) llvm/lib/Target/ARM/ARMInstrNEON.td (+16-8) 


``````````diff
diff --git a/llvm/lib/Target/ARM/ARMInstrNEON.td b/llvm/lib/Target/ARM/ARMInstrNEON.td
index e2450490c83b8..8e8ef64991e14 100644
--- a/llvm/lib/Target/ARM/ARMInstrNEON.td
+++ b/llvm/lib/Target/ARM/ARMInstrNEON.td
@@ -7403,26 +7403,34 @@ def SHA256SU1 : N3SHA3Op<"256su1", 0b00110, 0b10, int_arm_neon_sha256su1>;
 let Predicates = [HasNEON] in {
 def : Pat<(i32 (int_arm_neon_sha1h i32:$Rn)),
           (COPY_TO_REGCLASS (f32 (EXTRACT_SUBREG
-              (SHA1H (SUBREG_TO_REG (f32 (COPY_TO_REGCLASS i32:$Rn, SPR)),
-                                    ssub_0)),
+              (SHA1H (REG_SEQUENCE QPR, (f32 (COPY_TO_REGCLASS i32:$Rn, SPR)), ssub_0,
+                                        (i32 (IMPLICIT_DEF)), ssub_1,
+                                        (i32 (IMPLICIT_DEF)), ssub_2,
+                                        (i32 (IMPLICIT_DEF)), ssub_3)),
               ssub_0)), GPR)>;
 
 def : Pat<(v4i32 (int_arm_neon_sha1c v4i32:$hash_abcd, i32:$hash_e, v4i32:$wk)),
           (SHA1C v4i32:$hash_abcd,
-                 (SUBREG_TO_REG (f32 (COPY_TO_REGCLASS i32:$hash_e, SPR)),
-                                ssub_0),
+                 (REG_SEQUENCE QPR, (f32 (COPY_TO_REGCLASS i32:$hash_e, SPR)), ssub_0,
+                                    (i32 (IMPLICIT_DEF)), ssub_1,
+                                    (i32 (IMPLICIT_DEF)), ssub_2,
+                                    (i32 (IMPLICIT_DEF)), ssub_3),
                  v4i32:$wk)>;
 
 def : Pat<(v4i32 (int_arm_neon_sha1m v4i32:$hash_abcd, i32:$hash_e, v4i32:$wk)),
           (SHA1M v4i32:$hash_abcd,
-                 (SUBREG_TO_REG (f32 (COPY_TO_REGCLASS i32:$hash_e, SPR)),
-                                ssub_0),
+                 (REG_SEQUENCE QPR, (f32 (COPY_TO_REGCLASS i32:$hash_e, SPR)), ssub_0,
+                                    (i32 (IMPLICIT_DEF)), ssub_1,
+                                    (i32 (IMPLICIT_DEF)), ssub_2,
+                                    (i32 (IMPLICIT_DEF)), ssub_3),
                  v4i32:$wk)>;
 
 def : Pat<(v4i32 (int_arm_neon_sha1p v4i32:$hash_abcd, i32:$hash_e, v4i32:$wk)),
           (SHA1P v4i32:$hash_abcd,
-                 (SUBREG_TO_REG (f32 (COPY_TO_REGCLASS i32:$hash_e, SPR)),
-                                ssub_0),
+                 (REG_SEQUENCE QPR, (f32 (COPY_TO_REGCLASS i32:$hash_e, SPR)), ssub_0,
+                                    (i32 (IMPLICIT_DEF)), ssub_1,
+                                    (i32 (IMPLICIT_DEF)), ssub_2,
+                                    (i32 (IMPLICIT_DEF)), ssub_3),
                  v4i32:$wk)>;
 }
 

``````````

</details>


https://github.com/llvm/llvm-project/pull/179910


More information about the llvm-commits mailing list