[llvm] [AArch64][SME] Don't use glue for call lowering's SMSTART. (PR #68630)

Sander de Smalen via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 10 02:47:40 PDT 2023


================
@@ -368,15 +368,11 @@ define i8 @call_to_non_streaming_pass_sve_objects(ptr nocapture noundef readnone
 ; CHECK-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill
 ; CHECK-NEXT:    stp x29, x30, [sp, #64] // 16-byte Folded Spill
 ; CHECK-NEXT:    addvl sp, sp, #-3
-; CHECK-NEXT:    rdsvl x8, #1
-; CHECK-NEXT:    addvl x9, sp, #2
-; CHECK-NEXT:    addvl x10, sp, #1
-; CHECK-NEXT:    mov x11, sp
+; CHECK-NEXT:    rdsvl x3, #1
 ; CHECK-NEXT:    smstop sm
-; CHECK-NEXT:    mov x0, x9
-; CHECK-NEXT:    mov x1, x10
-; CHECK-NEXT:    mov x2, x11
-; CHECK-NEXT:    mov x3, x8
+; CHECK-NEXT:    addvl x0, sp, #2
----------------
sdesmalen-arm wrote:

This is semantically different because `addvl` has a different meaning after the `smstop` then it did before.
Before the `smstop` it would have calculated the address of `%Data1`, `%Data2` and `%Data3` using the streaming VL (SVL), whereas now it uses the regular (non-streaming) VL. If SVL != VL, then this is a different address.

That's also the reason for having this `Glue`, so that these are not scheduled after the `smstop`.

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


More information about the llvm-commits mailing list