brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 666e677 Raw
79 lines · plain
1; RUN: opt -passes=licm -mtriple aarch64-linux-gnu -mattr=+sve -S < %s | FileCheck %s2 3define void @no_hoist_load1_nxv2i64(ptr %out, ptr %in8, i32 %n) {4; CHECK-LABEL: @no_hoist_load1_nxv2i64(5; CHECK: entry:6; CHECK-NOT: load7; CHECK: for.body:8; CHECK: load9entry:10  %cmp0 = icmp ugt i32 %n, 011  %invst = call ptr @llvm.invariant.start.p0(i64 16, ptr %in8)12  br i1 %cmp0, label %for.body, label %for.end13 14for.body:15  %i = phi i32 [0, %entry], [%inc, %for.body]16  %i2 = zext i32 %i to i6417  %ptr = getelementptr <vscale x 2 x i64>, ptr %out, i64 %i218  %val = load <vscale x 2 x i64>, ptr %in8, align 1619  store <vscale x 2 x i64> %val, ptr %ptr, align 1620  %inc = add nuw nsw i32 %i, 121  %cmp = icmp ult i32 %inc, %n22  br i1 %cmp, label %for.body, label %for.end23 24for.end:25  ret void26}27 28define void @no_hoist_gather(ptr %out_ptr, ptr %in_ptr, <vscale x 2 x i64> %ptr_vec, i64 %n, <vscale x 2 x i1> %pred) {29; CHECK-LABEL: @no_hoist_gather(30; CHECK: entry:31; CHECK-NOT: llvm.aarch64.sve.ld1.gather.scalar.offset32; CHECK: for.body:33; CHECK: llvm.aarch64.sve.ld1.gather.scalar.offset34entry:35  br label %for.body36 37for.body:38  %i = phi i64 [0, %entry], [%inc, %for.body]39  %gather = call <vscale x 2 x i32> @llvm.aarch64.sve.ld1.gather.scalar.offset.nxv2i32.nxv2i64(<vscale x 2 x i1> %pred, <vscale x 2 x i64> %ptr_vec, i64 0)40  %in_ptr_gep = getelementptr <vscale x 2 x i32>, ptr %in_ptr, i64 %i41  %in_ptr_load = load <vscale x 2 x i32>, ptr %in_ptr_gep, align 842  %sum = add <vscale x 2 x i32> %gather, %in_ptr_load43  %out_ptr_gep = getelementptr <vscale x 2 x i32>, ptr %out_ptr, i64 %i44  store  <vscale x 2 x i32> %sum, ptr %out_ptr_gep, align 845  %inc = add nuw nsw i64 %i, 146  %cmp = icmp ult i64 %inc, %n47  br i1 %cmp, label %for.body, label %for.end48 49for.end:50  ret void51}52 53define void @no_hoist_scatter(ptr %out_ptr, ptr %in_ptr, <vscale x 2 x i64> %ptr_vec, i64 %n, <vscale x 2 x i1> %pred) {54; CHECK-LABEL: @no_hoist_scatter(55; CHECK: entry:56; CHECK-NOT: load57; CHECK: for.body:58; CHECK: load59entry:60  br label %for.body61 62for.body:63  %i = phi i64 [0, %entry], [%inc, %for.body]64  %in_ptr_load = load <vscale x 2 x i32>, ptr %in_ptr, align 865  call void @llvm.aarch64.sve.st1.scatter.scalar.offset.nxv2i32.nxv2i64(<vscale x 2 x i32> %in_ptr_load, <vscale x 2 x i1> %pred, <vscale x 2 x i64> %ptr_vec, i64 %i)66  %inc = add nuw nsw i64 %i, 167  %cmp = icmp ult i64 %inc, %n68  br i1 %cmp, label %for.body, label %for.end69 70for.end:71  ret void72}73 74declare ptr @llvm.invariant.start.p0(i64, ptr nocapture) nounwind readonly75 76declare void @llvm.aarch64.sve.st1.scatter.scalar.offset.nxv2i32.nxv2i64(<vscale x 2 x i32>, <vscale x 2 x i1>, <vscale x 2 x i64>, i64)77 78declare <vscale x 2 x i32> @llvm.aarch64.sve.ld1.gather.scalar.offset.nxv2i32.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, i64)79