brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.6 KiB · 0ac4608 Raw
214 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+sme,+sme2p1 -stop-before=finalize-isel -verify-machineinstrs < %s | FileCheck %s --check-prefix=CHECK-BEFORE-ISEL3; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+sme,+sme2p1 -stop-after=finalize-isel -verify-machineinstrs < %s | FileCheck %s --check-prefix=CHECK-AFTER-ISEL4 5target triple = "aarch64-unknown-linux-gnu"6 7declare void @bar_enabled(<vscale x 4 x i32>) #08declare void @bar(<vscale x 4 x i32>)9declare <vscale x 4 x i32> @bar_retv_enabled() #010declare <vscale x 4 x i32> @bar_retv()11 12; Non-streaming -> calls streaming callee13define void @foo_non_streaming_pass_arg(ptr %arg) {14  ; CHECK-BEFORE-ISEL-LABEL: name: foo_non_streaming_pass_arg15  ; CHECK-BEFORE-ISEL: bb.0.entry:16  ; CHECK-BEFORE-ISEL-NEXT:   liveins: $x017  ; CHECK-BEFORE-ISEL-NEXT: {{  $}}18  ; CHECK-BEFORE-ISEL-NEXT:   [[COPY:%[0-9]+]]:gpr64common = COPY $x019  ; CHECK-BEFORE-ISEL-NEXT:   [[LDR_ZXI:%[0-9]+]]:zpr = LDR_ZXI [[COPY]], 0 :: (load (<vscale x 1 x s128>) from %ir.arg)20  ; CHECK-BEFORE-ISEL-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp21  ; CHECK-BEFORE-ISEL-NEXT:   CHECK_MATCHING_VL_PSEUDO22  ; CHECK-BEFORE-ISEL-NEXT:   MSRpstatesvcrImm1 1, 1, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit-def $sp, implicit-def $z0, implicit $vg, implicit-def $vg, implicit-def $fpmr23  ; CHECK-BEFORE-ISEL-NEXT:   $z0 = COPY [[LDR_ZXI]]24  ; CHECK-BEFORE-ISEL-NEXT:   BL @bar_enabled, csr_aarch64_sve_aapcs, implicit-def dead $lr, implicit $sp, implicit $z0, implicit-def $sp25  ; CHECK-BEFORE-ISEL-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp26  ; CHECK-BEFORE-ISEL-NEXT:   MSRpstatesvcrImm1 1, 0, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit $vg, implicit-def $vg, implicit-def $fpmr27  ; CHECK-BEFORE-ISEL-NEXT:   RET_ReallyLR28  ;29  ; CHECK-AFTER-ISEL-LABEL: name: foo_non_streaming_pass_arg30  ; CHECK-AFTER-ISEL: bb.0.entry:31  ; CHECK-AFTER-ISEL-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)32  ; CHECK-AFTER-ISEL-NEXT:   liveins: $x033  ; CHECK-AFTER-ISEL-NEXT: {{  $}}34  ; CHECK-AFTER-ISEL-NEXT:   [[COPY:%[0-9]+]]:gpr64common = COPY $x035  ; CHECK-AFTER-ISEL-NEXT:   [[LDR_ZXI:%[0-9]+]]:zpr = LDR_ZXI [[COPY]], 0 :: (load (<vscale x 1 x s128>) from %ir.arg)36  ; CHECK-AFTER-ISEL-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp37  ; CHECK-AFTER-ISEL-NEXT:   [[RDVLI_XI:%[0-9]+]]:gpr64 = RDVLI_XI 1, implicit $vg38  ; CHECK-AFTER-ISEL-NEXT:   [[COPY1:%[0-9]+]]:gpr64sp = COPY [[RDVLI_XI]]39  ; CHECK-AFTER-ISEL-NEXT:   [[ADDSVL_XXI:%[0-9]+]]:gpr64sp = ADDSVL_XXI [[COPY1]], -1, implicit $vg40  ; CHECK-AFTER-ISEL-NEXT:   [[COPY2:%[0-9]+]]:gpr64 = COPY [[ADDSVL_XXI]]41  ; CHECK-AFTER-ISEL-NEXT:   CBZX [[COPY2]], %bb.242  ; CHECK-AFTER-ISEL-NEXT: {{  $}}43  ; CHECK-AFTER-ISEL-NEXT: bb.1.entry:44  ; CHECK-AFTER-ISEL-NEXT:   successors:45  ; CHECK-AFTER-ISEL-NEXT: {{  $}}46  ; CHECK-AFTER-ISEL-NEXT:   BRK 147  ; CHECK-AFTER-ISEL-NEXT: {{  $}}48  ; CHECK-AFTER-ISEL-NEXT: bb.2.entry:49  ; CHECK-AFTER-ISEL-NEXT:   MSRpstatesvcrImm1 1, 1, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit-def $sp, implicit-def $z0, implicit $vg, implicit-def $vg, implicit-def $fpmr50  ; CHECK-AFTER-ISEL-NEXT:   $z0 = COPY [[LDR_ZXI]]51  ; CHECK-AFTER-ISEL-NEXT:   BL @bar_enabled, csr_aarch64_sve_aapcs, implicit-def dead $lr, implicit $sp, implicit $z0, implicit-def $sp52  ; CHECK-AFTER-ISEL-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp53  ; CHECK-AFTER-ISEL-NEXT:   MSRpstatesvcrImm1 1, 0, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit $vg, implicit-def $vg, implicit-def $fpmr54  ; CHECK-AFTER-ISEL-NEXT:   RET_ReallyLR55entry:56  %v = load <vscale x 4 x i32>, ptr %arg, align 1657  tail call void @bar_enabled(<vscale x 4 x i32> %v) #058  ret void59}60 61; Streaming -> calls non-streaming callee62define void @foo_streaming_pass_arg(ptr %arg) #0 {63  ; CHECK-BEFORE-ISEL-LABEL: name: foo_streaming_pass_arg64  ; CHECK-BEFORE-ISEL: bb.0.entry:65  ; CHECK-BEFORE-ISEL-NEXT:   liveins: $x066  ; CHECK-BEFORE-ISEL-NEXT: {{  $}}67  ; CHECK-BEFORE-ISEL-NEXT:   [[COPY:%[0-9]+]]:gpr64common = COPY $x068  ; CHECK-BEFORE-ISEL-NEXT:   [[LDR_ZXI:%[0-9]+]]:zpr = LDR_ZXI [[COPY]], 0 :: (load (<vscale x 1 x s128>) from %ir.arg)69  ; CHECK-BEFORE-ISEL-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp70  ; CHECK-BEFORE-ISEL-NEXT:   MSRpstatesvcrImm1 1, 0, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit-def $sp, implicit-def $z0, implicit $vg, implicit-def $vg, implicit-def $fpmr71  ; CHECK-BEFORE-ISEL-NEXT:   CHECK_MATCHING_VL_PSEUDO72  ; CHECK-BEFORE-ISEL-NEXT:   $z0 = COPY [[LDR_ZXI]]73  ; CHECK-BEFORE-ISEL-NEXT:   BL @bar, csr_aarch64_sve_aapcs, implicit-def dead $lr, implicit $sp, implicit $z0, implicit-def $sp74  ; CHECK-BEFORE-ISEL-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp75  ; CHECK-BEFORE-ISEL-NEXT:   MSRpstatesvcrImm1 1, 1, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit $vg, implicit-def $vg, implicit-def $fpmr76  ; CHECK-BEFORE-ISEL-NEXT:   RET_ReallyLR77  ;78  ; CHECK-AFTER-ISEL-LABEL: name: foo_streaming_pass_arg79  ; CHECK-AFTER-ISEL: bb.0.entry:80  ; CHECK-AFTER-ISEL-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)81  ; CHECK-AFTER-ISEL-NEXT:   liveins: $x082  ; CHECK-AFTER-ISEL-NEXT: {{  $}}83  ; CHECK-AFTER-ISEL-NEXT:   [[COPY:%[0-9]+]]:gpr64common = COPY $x084  ; CHECK-AFTER-ISEL-NEXT:   [[LDR_ZXI:%[0-9]+]]:zpr = LDR_ZXI [[COPY]], 0 :: (load (<vscale x 1 x s128>) from %ir.arg)85  ; CHECK-AFTER-ISEL-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp86  ; CHECK-AFTER-ISEL-NEXT:   MSRpstatesvcrImm1 1, 0, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit-def $sp, implicit-def $z0, implicit $vg, implicit-def $vg, implicit-def $fpmr87  ; CHECK-AFTER-ISEL-NEXT:   [[RDVLI_XI:%[0-9]+]]:gpr64 = RDVLI_XI 1, implicit $vg88  ; CHECK-AFTER-ISEL-NEXT:   [[COPY1:%[0-9]+]]:gpr64sp = COPY [[RDVLI_XI]]89  ; CHECK-AFTER-ISEL-NEXT:   [[ADDSVL_XXI:%[0-9]+]]:gpr64sp = ADDSVL_XXI [[COPY1]], -1, implicit $vg90  ; CHECK-AFTER-ISEL-NEXT:   [[COPY2:%[0-9]+]]:gpr64 = COPY [[ADDSVL_XXI]]91  ; CHECK-AFTER-ISEL-NEXT:   CBZX [[COPY2]], %bb.292  ; CHECK-AFTER-ISEL-NEXT: {{  $}}93  ; CHECK-AFTER-ISEL-NEXT: bb.1.entry:94  ; CHECK-AFTER-ISEL-NEXT:   successors:95  ; CHECK-AFTER-ISEL-NEXT: {{  $}}96  ; CHECK-AFTER-ISEL-NEXT:   BRK 197  ; CHECK-AFTER-ISEL-NEXT: {{  $}}98  ; CHECK-AFTER-ISEL-NEXT: bb.2.entry:99  ; CHECK-AFTER-ISEL-NEXT:   $z0 = COPY [[LDR_ZXI]]100  ; CHECK-AFTER-ISEL-NEXT:   BL @bar, csr_aarch64_sve_aapcs, implicit-def dead $lr, implicit $sp, implicit $z0, implicit-def $sp101  ; CHECK-AFTER-ISEL-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp102  ; CHECK-AFTER-ISEL-NEXT:   MSRpstatesvcrImm1 1, 1, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit $vg, implicit-def $vg, implicit-def $fpmr103  ; CHECK-AFTER-ISEL-NEXT:   RET_ReallyLR104entry:105  %v = load <vscale x 4 x i32>, ptr %arg, align 16106  tail call void @bar(<vscale x 4 x i32> %v)107  ret void108}109 110; Non-streaming -> returns SVE value from streaming callee111define void @foo_non_streaming_retval(ptr %ptr) {112  ; CHECK-BEFORE-ISEL-LABEL: name: foo_non_streaming_retval113  ; CHECK-BEFORE-ISEL: bb.0.entry:114  ; CHECK-BEFORE-ISEL-NEXT:   liveins: $x0115  ; CHECK-BEFORE-ISEL-NEXT: {{  $}}116  ; CHECK-BEFORE-ISEL-NEXT:   [[COPY:%[0-9]+]]:gpr64common = COPY $x0117  ; CHECK-BEFORE-ISEL-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp118  ; CHECK-BEFORE-ISEL-NEXT:   CHECK_MATCHING_VL_PSEUDO119  ; CHECK-BEFORE-ISEL-NEXT:   MSRpstatesvcrImm1 1, 1, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit-def $sp, implicit-def $z0, implicit $vg, implicit-def $vg, implicit-def $fpmr120  ; CHECK-BEFORE-ISEL-NEXT:   BL @bar_retv_enabled, csr_aarch64_sve_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $z0121  ; CHECK-BEFORE-ISEL-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp122  ; CHECK-BEFORE-ISEL-NEXT:   [[COPY1:%[0-9]+]]:zpr = COPY $z0123  ; CHECK-BEFORE-ISEL-NEXT:   MSRpstatesvcrImm1 1, 0, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit $vg, implicit-def $vg, implicit-def $fpmr124  ; CHECK-BEFORE-ISEL-NEXT:   [[COPY2:%[0-9]+]]:zpr = COPY [[COPY1]]125  ; CHECK-BEFORE-ISEL-NEXT:   STR_ZXI [[COPY2]], [[COPY]], 0 :: (store (<vscale x 1 x s128>) into %ir.ptr)126  ; CHECK-BEFORE-ISEL-NEXT:   RET_ReallyLR127  ;128  ; CHECK-AFTER-ISEL-LABEL: name: foo_non_streaming_retval129  ; CHECK-AFTER-ISEL: bb.0.entry:130  ; CHECK-AFTER-ISEL-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)131  ; CHECK-AFTER-ISEL-NEXT:   liveins: $x0132  ; CHECK-AFTER-ISEL-NEXT: {{  $}}133  ; CHECK-AFTER-ISEL-NEXT:   [[COPY:%[0-9]+]]:gpr64common = COPY $x0134  ; CHECK-AFTER-ISEL-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp135  ; CHECK-AFTER-ISEL-NEXT:   [[RDVLI_XI:%[0-9]+]]:gpr64 = RDVLI_XI 1, implicit $vg136  ; CHECK-AFTER-ISEL-NEXT:   [[COPY1:%[0-9]+]]:gpr64sp = COPY [[RDVLI_XI]]137  ; CHECK-AFTER-ISEL-NEXT:   [[ADDSVL_XXI:%[0-9]+]]:gpr64sp = ADDSVL_XXI [[COPY1]], -1, implicit $vg138  ; CHECK-AFTER-ISEL-NEXT:   [[COPY2:%[0-9]+]]:gpr64 = COPY [[ADDSVL_XXI]]139  ; CHECK-AFTER-ISEL-NEXT:   CBZX [[COPY2]], %bb.2140  ; CHECK-AFTER-ISEL-NEXT: {{  $}}141  ; CHECK-AFTER-ISEL-NEXT: bb.1.entry:142  ; CHECK-AFTER-ISEL-NEXT:   successors:143  ; CHECK-AFTER-ISEL-NEXT: {{  $}}144  ; CHECK-AFTER-ISEL-NEXT:   BRK 1145  ; CHECK-AFTER-ISEL-NEXT: {{  $}}146  ; CHECK-AFTER-ISEL-NEXT: bb.2.entry:147  ; CHECK-AFTER-ISEL-NEXT:   MSRpstatesvcrImm1 1, 1, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit-def $sp, implicit-def $z0, implicit $vg, implicit-def $vg, implicit-def $fpmr148  ; CHECK-AFTER-ISEL-NEXT:   BL @bar_retv_enabled, csr_aarch64_sve_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $z0149  ; CHECK-AFTER-ISEL-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp150  ; CHECK-AFTER-ISEL-NEXT:   [[COPY3:%[0-9]+]]:zpr = COPY $z0151  ; CHECK-AFTER-ISEL-NEXT:   MSRpstatesvcrImm1 1, 0, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit $vg, implicit-def $vg, implicit-def $fpmr152  ; CHECK-AFTER-ISEL-NEXT:   [[COPY4:%[0-9]+]]:zpr = COPY [[COPY3]]153  ; CHECK-AFTER-ISEL-NEXT:   STR_ZXI [[COPY4]], [[COPY]], 0 :: (store (<vscale x 1 x s128>) into %ir.ptr)154  ; CHECK-AFTER-ISEL-NEXT:   RET_ReallyLR155entry:156  %v = tail call <vscale x 4 x i32> @bar_retv_enabled() #0157  store <vscale x 4 x i32> %v, ptr %ptr, align 16158  ret void159}160 161; Streaming -> returns SVE value from non-streaming callee162define void @foo_streaming_retval(ptr %ptr) #0 {163  ; CHECK-BEFORE-ISEL-LABEL: name: foo_streaming_retval164  ; CHECK-BEFORE-ISEL: bb.0.entry:165  ; CHECK-BEFORE-ISEL-NEXT:   liveins: $x0166  ; CHECK-BEFORE-ISEL-NEXT: {{  $}}167  ; CHECK-BEFORE-ISEL-NEXT:   [[COPY:%[0-9]+]]:gpr64common = COPY $x0168  ; CHECK-BEFORE-ISEL-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp169  ; CHECK-BEFORE-ISEL-NEXT:   MSRpstatesvcrImm1 1, 0, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit-def $sp, implicit-def $z0, implicit $vg, implicit-def $vg, implicit-def $fpmr170  ; CHECK-BEFORE-ISEL-NEXT:   CHECK_MATCHING_VL_PSEUDO171  ; CHECK-BEFORE-ISEL-NEXT:   BL @bar_retv, csr_aarch64_sve_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $z0172  ; CHECK-BEFORE-ISEL-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp173  ; CHECK-BEFORE-ISEL-NEXT:   [[COPY1:%[0-9]+]]:zpr = COPY $z0174  ; CHECK-BEFORE-ISEL-NEXT:   MSRpstatesvcrImm1 1, 1, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit $vg, implicit-def $vg, implicit-def $fpmr175  ; CHECK-BEFORE-ISEL-NEXT:   [[COPY2:%[0-9]+]]:zpr = COPY [[COPY1]]176  ; CHECK-BEFORE-ISEL-NEXT:   STR_ZXI [[COPY2]], [[COPY]], 0 :: (store (<vscale x 1 x s128>) into %ir.ptr)177  ; CHECK-BEFORE-ISEL-NEXT:   RET_ReallyLR178  ;179  ; CHECK-AFTER-ISEL-LABEL: name: foo_streaming_retval180  ; CHECK-AFTER-ISEL: bb.0.entry:181  ; CHECK-AFTER-ISEL-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)182  ; CHECK-AFTER-ISEL-NEXT:   liveins: $x0183  ; CHECK-AFTER-ISEL-NEXT: {{  $}}184  ; CHECK-AFTER-ISEL-NEXT:   [[COPY:%[0-9]+]]:gpr64common = COPY $x0185  ; CHECK-AFTER-ISEL-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp186  ; CHECK-AFTER-ISEL-NEXT:   MSRpstatesvcrImm1 1, 0, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit-def $sp, implicit-def $z0, implicit $vg, implicit-def $vg, implicit-def $fpmr187  ; CHECK-AFTER-ISEL-NEXT:   [[RDVLI_XI:%[0-9]+]]:gpr64 = RDVLI_XI 1, implicit $vg188  ; CHECK-AFTER-ISEL-NEXT:   [[COPY1:%[0-9]+]]:gpr64sp = COPY [[RDVLI_XI]]189  ; CHECK-AFTER-ISEL-NEXT:   [[ADDSVL_XXI:%[0-9]+]]:gpr64sp = ADDSVL_XXI [[COPY1]], -1, implicit $vg190  ; CHECK-AFTER-ISEL-NEXT:   [[COPY2:%[0-9]+]]:gpr64 = COPY [[ADDSVL_XXI]]191  ; CHECK-AFTER-ISEL-NEXT:   CBZX [[COPY2]], %bb.2192  ; CHECK-AFTER-ISEL-NEXT: {{  $}}193  ; CHECK-AFTER-ISEL-NEXT: bb.1.entry:194  ; CHECK-AFTER-ISEL-NEXT:   successors:195  ; CHECK-AFTER-ISEL-NEXT: {{  $}}196  ; CHECK-AFTER-ISEL-NEXT:   BRK 1197  ; CHECK-AFTER-ISEL-NEXT: {{  $}}198  ; CHECK-AFTER-ISEL-NEXT: bb.2.entry:199  ; CHECK-AFTER-ISEL-NEXT:   BL @bar_retv, csr_aarch64_sve_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $z0200  ; CHECK-AFTER-ISEL-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp201  ; CHECK-AFTER-ISEL-NEXT:   [[COPY3:%[0-9]+]]:zpr = COPY $z0202  ; CHECK-AFTER-ISEL-NEXT:   MSRpstatesvcrImm1 1, 1, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit $vg, implicit-def $vg, implicit-def $fpmr203  ; CHECK-AFTER-ISEL-NEXT:   [[COPY4:%[0-9]+]]:zpr = COPY [[COPY3]]204  ; CHECK-AFTER-ISEL-NEXT:   STR_ZXI [[COPY4]], [[COPY]], 0 :: (store (<vscale x 1 x s128>) into %ir.ptr)205  ; CHECK-AFTER-ISEL-NEXT:   RET_ReallyLR206entry:207  %v = tail call <vscale x 4 x i32> @bar_retv()208  store <vscale x 4 x i32> %v, ptr %ptr, align 16209  ret void210}211 212attributes #0 = { "aarch64_pstate_sm_enabled" }213attributes #1 = { "aarch64_pstate_sm_compatible" }214