1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -slp-vectorizer -S | FileCheck %s 3 4target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" 5target triple = "aarch64-unknown-linux-gnu" 6 7; This test check that we are not crashing or changing the code. 8 9define void @test() { 10; CHECK-LABEL: @test( 11; CHECK-NEXT: [[LOAD0:%.*]] = tail call <vscale x 16 x i8> @llvm.masked.load.nxv16i8.p0nxv16i8(<vscale x 16 x i8>* undef, i32 1, <vscale x 16 x i1> undef, <vscale x 16 x i8> undef) 12; CHECK-NEXT: [[LOAD1:%.*]] = tail call <vscale x 16 x i8> @llvm.masked.load.nxv16i8.p0nxv16i8(<vscale x 16 x i8>* undef, i32 1, <vscale x 16 x i1> undef, <vscale x 16 x i8> undef) 13; CHECK-NEXT: [[ADD:%.*]] = add <vscale x 16 x i8> [[LOAD1]], [[LOAD0]] 14; CHECK-NEXT: tail call void @llvm.masked.store.nxv16i8.p0nxv16i8(<vscale x 16 x i8> [[ADD]], <vscale x 16 x i8>* undef, i32 1, <vscale x 16 x i1> undef) 15; CHECK-NEXT: ret void 16; 17 %load0 = tail call <vscale x 16 x i8> @llvm.masked.load.nxv16i8.p0nxv16i8(<vscale x 16 x i8> *undef, i32 1, <vscale x 16 x i1> undef, <vscale x 16 x i8> undef) 18 %load1 = tail call <vscale x 16 x i8> @llvm.masked.load.nxv16i8.p0nxv16i8(<vscale x 16 x i8> *undef, i32 1, <vscale x 16 x i1> undef, <vscale x 16 x i8> undef) 19 %add = add <vscale x 16 x i8> %load1, %load0 20 tail call void @llvm.masked.store.nxv16i8.p0nxv16i8(<vscale x 16 x i8> %add, <vscale x 16 x i8>* undef, i32 1, <vscale x 16 x i1> undef) 21 ret void 22} 23 24define <vscale x 4 x i32> @scalable_phi(<vscale x 4 x i32> %a, i32 %b) { 25; CHECK-LABEL: @scalable_phi( 26; CHECK-NEXT: entry: 27; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[B:%.*]], 0 28; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[END:%.*]] 29; CHECK: if.then: 30; CHECK-NEXT: br label [[END]] 31; CHECK: end: 32; CHECK-NEXT: [[RETVAL:%.*]] = phi <vscale x 4 x i32> [ [[A:%.*]], [[ENTRY:%.*]] ], [ zeroinitializer, [[IF_THEN]] ] 33; CHECK-NEXT: ret <vscale x 4 x i32> [[RETVAL]] 34; 35entry: 36 %cmp = icmp eq i32 %b, 0 37 br i1 %cmp, label %if.then, label %end 38 39if.then: 40 br label %end 41 42end: 43 %retval = phi <vscale x 4 x i32> [ %a, %entry ], [ zeroinitializer, %if.then ] 44 ret <vscale x 4 x i32> %retval 45} 46 47declare <vscale x 16 x i8> @llvm.masked.load.nxv16i8.p0nxv16i8(<vscale x 16 x i8>*, i32 immarg, <vscale x 16 x i1>, <vscale x 16 x i8>) 48declare void @llvm.masked.store.nxv16i8.p0nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>*, i32 immarg, <vscale x 16 x i1>) 49