brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 8f458fb Raw
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