71 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O2 -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s3 4; #include <arm_sve.h>5; #include <stdint.h>6;7; void redundant_store(uint32_t *p, svint32_t v) {8; *p = 1;9; *(svint32_t *)p = v;10; }11define void @redundant_store(ptr nocapture %p, <vscale x 4 x i32> %v) {12; CHECK-LABEL: redundant_store:13; CHECK: // %bb.0:14; CHECK-NEXT: str z0, [x0]15; CHECK-NEXT: ret16 store i32 1, ptr %p, align 417 store <vscale x 4 x i32> %v, ptr %p, align 1618 ret void19}20 21define void @two_scalable_same_size(ptr writeonly %ptr, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {22; CHECK-LABEL: two_scalable_same_size:23; CHECK: // %bb.0: // %entry24; CHECK-NEXT: str z1, [x0]25; CHECK-NEXT: ret26entry:27 store <vscale x 4 x i32> %a, ptr %ptr28 store <vscale x 4 x i32> %b, ptr %ptr29 ret void30}31 32; make sure that scalable store is present, becuase we don't know its final size.33define void @keep_scalable_store(ptr writeonly %ptr, ptr %a, <vscale x 4 x i32> %b) {34; CHECK-LABEL: keep_scalable_store:35; CHECK: // %bb.0: // %entry36; CHECK-NEXT: ldp q2, q1, [x1]37; CHECK-NEXT: str z0, [x0]38; CHECK-NEXT: stp q2, q1, [x0]39; CHECK-NEXT: ret40entry:41 %0 = load <8 x i32>, ptr %a42 store <vscale x 4 x i32> %b, ptr %ptr43 store <8 x i32> %0, ptr %ptr44 ret void45}46 47define void @two_scalable_keep_stores(ptr writeonly %ptr, <vscale x 4 x i32> %a, <vscale x 4 x i64> %b) {48; CHECK-LABEL: two_scalable_keep_stores:49; CHECK: // %bb.0: // %entry50; CHECK-NEXT: str z2, [x0, #1, mul vl]51; CHECK-NEXT: str z1, [x0]52; CHECK-NEXT: str z0, [x0]53; CHECK-NEXT: ret54entry:55 store <vscale x 4 x i64> %b, ptr %ptr56 store <vscale x 4 x i32> %a, ptr %ptr57 ret void58}59 60define void @two_scalable_remove_store(ptr writeonly %ptr, <vscale x 4 x i32> %a, <vscale x 4 x i64> %b) {61; CHECK-LABEL: two_scalable_remove_store:62; CHECK: // %bb.0: // %entry63; CHECK-NEXT: str z2, [x0, #1, mul vl]64; CHECK-NEXT: str z1, [x0]65; CHECK-NEXT: ret66entry:67 store <vscale x 4 x i32> %a, ptr %ptr68 store <vscale x 4 x i64> %b, ptr %ptr69 ret void70}71