brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · 8fd0421 Raw
106 lines · plain
1; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s2 3; Test for correct placement of 'lvl' instructions4 5; Function Attrs: nounwind readonly6declare <256 x double> @llvm.ve.vl.vld.vssl(i64, ptr, i32)7declare void @llvm.ve.vl.vst.vssl(<256 x double>, i64, ptr, i32)8 9; Check that the backend can handle constant VL as well as parametric VL10; sources.11 12; Function Attrs: nounwind13define void @switching_vl(i32 %evl, i32 %evl2, ptr %P, ptr %Q) {14; CHECK-LABEL: switching_vl:15; CHECK:       # %bb.0:16; CHECK-NEXT:    lea %s4, 25617; CHECK-NEXT:    lvl %s418; CHECK-NEXT:    vld %v0, 8, %s219; CHECK-NEXT:    and %s0, %s0, (32)020; CHECK-NEXT:    lvl %s021; CHECK-NEXT:    vst %v0, 16, %s322; CHECK-NEXT:    lea %s4, 12823; CHECK-NEXT:    lvl %s424; CHECK-NEXT:    vld %v0, 16, %s225; CHECK-NEXT:    and %s1, %s1, (32)026; CHECK-NEXT:    lvl %s127; CHECK-NEXT:    vst %v0, 16, %s328; CHECK-NEXT:    lvl %s429; CHECK-NEXT:    vld %v0, 8, %s230; CHECK-NEXT:    lvl %s031; CHECK-NEXT:    vst %v0, 16, %s332; CHECK-NEXT:    b.l.t (, %s10)33  %l0 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 8, ptr %P, i32 256)34  tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l0, i64 16, ptr %Q, i32 %evl)35  %l1 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 16, ptr %P, i32 128)36  tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l1, i64 16, ptr %Q, i32 %evl2)37  %l2 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 8, ptr %P, i32 128)38  tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l2, i64 16, ptr %Q, i32 %evl)39  ret void40}41 42; Check that no redundant 'lvl' is inserted when vector length does not change43; in a basic block.44 45; Function Attrs: nounwind46define void @stable_vl(i32 %evl, ptr %P, ptr %Q) {47; CHECK-LABEL: stable_vl:48; CHECK:       # %bb.0:49; CHECK-NEXT:    and %s0, %s0, (32)050; CHECK-NEXT:    lvl %s051; CHECK-NEXT:    vld %v0, 8, %s152; CHECK-NEXT:    vst %v0, 16, %s253; CHECK-NEXT:    vld %v0, 16, %s154; CHECK-NEXT:    vst %v0, 16, %s255; CHECK-NEXT:    vld %v0, 8, %s156; CHECK-NEXT:    vst %v0, 16, %s257; CHECK-NEXT:    b.l.t (, %s10)58  %l0 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 8, ptr %P, i32 %evl)59  tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l0, i64 16, ptr %Q, i32 %evl)60  %l1 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 16, ptr %P, i32 %evl)61  tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l1, i64 16, ptr %Q, i32 %evl)62  %l2 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 8, ptr %P, i32 %evl)63  tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l2, i64 16, ptr %Q, i32 %evl)64  ret void65}66 67;;; Check the case we have a call in the middle of vector instructions.68 69; Function Attrs: nounwind70define void @call_invl(i32 %evl, ptr %P, ptr %Q) {71; CHECK-LABEL: call_invl:72; CHECK:       .LBB{{[0-9]+}}_2:73; CHECK-NEXT:    st %s18, 288(, %s11) # 8-byte Folded Spill74; CHECK-NEXT:    st %s19, 296(, %s11) # 8-byte Folded Spill75; CHECK-NEXT:    st %s20, 304(, %s11) # 8-byte Folded Spill76; CHECK-NEXT:    or %s18, 0, %s177; CHECK-NEXT:    and %s20, %s0, (32)078; CHECK-NEXT:    lvl %s2079; CHECK-NEXT:    vld %v0, 8, %s180; CHECK-NEXT:    or %s19, 0, %s281; CHECK-NEXT:    vst %v0, 16, %s282; CHECK-NEXT:    lea %s0, fun@lo83; CHECK-NEXT:    and %s0, %s0, (32)084; CHECK-NEXT:    lea.sl %s12, fun@hi(, %s0)85; CHECK-NEXT:    bsic %s10, (, %s12)86; CHECK-NEXT:    lvl %s2087; CHECK-NEXT:    vld %v0, 16, %s1888; CHECK-NEXT:    vst %v0, 16, %s1989; CHECK-NEXT:    vld %v0, 8, %s1890; CHECK-NEXT:    vst %v0, 16, %s1991; CHECK-NEXT:    ld %s20, 304(, %s11) # 8-byte Folded Reload92; CHECK-NEXT:    ld %s19, 296(, %s11) # 8-byte Folded Reload93; CHECK-NEXT:    ld %s18, 288(, %s11) # 8-byte Folded Reload94; CHECK-NEXT:    or %s11, 0, %s995  %l0 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 8, ptr %P, i32 %evl)96  tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l0, i64 16, ptr %Q, i32 %evl)97  call void @fun()98  %l1 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 16, ptr %P, i32 %evl)99  tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l1, i64 16, ptr %Q, i32 %evl)100  %l2 = tail call <256 x double> @llvm.ve.vl.vld.vssl(i64 8, ptr %P, i32 %evl)101  tail call void @llvm.ve.vl.vst.vssl(<256 x double> %l2, i64 16, ptr %Q, i32 %evl)102  ret void103}104 105declare void @fun()106