1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=ve-unknown-unknown -mattr=+vpu | FileCheck %s 3 4declare <128 x double> @llvm.masked.load.v128f64.p0(ptr %0, i32 immarg %1, <128 x i1> %2, <128 x double> %3) #0 5 6; TODO: Custom widen by lowering to vvp_load in ReplaceNodeResult 7; Function Attrs: nounwind 8; define fastcc <128 x double> @vec_mload_v128f64(ptr %P, <128 x i1> %M) { 9; %r = call <128 x double> @llvm.masked.load.v128f64.p0(ptr %P, i32 16, <128 x i1> %M, <128 x double> undef) 10; ret <128 x double> %r 11; } 12 13 14declare <256 x double> @llvm.masked.load.v256f64.p0(ptr %0, i32 immarg %1, <256 x i1> %2, <256 x double> %3) #0 15 16; Function Attrs: nounwind 17define fastcc <256 x double> @vec_mload_v256f64(ptr %P, <256 x i1> %M) { 18; CHECK-LABEL: vec_mload_v256f64: 19; CHECK: # %bb.0: 20; CHECK-NEXT: lea %s1, 256 21; CHECK-NEXT: lvl %s1 22; CHECK-NEXT: vseq %v0 23; CHECK-NEXT: vmulu.l %v0, 8, %v0, %vm1 24; CHECK-NEXT: vaddu.l %v0, %s0, %v0, %vm1 25; CHECK-NEXT: vgt %v0, %v0, 0, 0, %vm1 26; CHECK-NEXT: b.l.t (, %s10) 27 %r = call <256 x double> @llvm.masked.load.v256f64.p0(ptr %P, i32 16, <256 x i1> %M, <256 x double> undef) 28 ret <256 x double> %r 29} 30 31; Function Attrs: nounwind 32define fastcc <256 x double> @vec_load_v256f64(ptr %P) { 33; CHECK-LABEL: vec_load_v256f64: 34; CHECK: # %bb.0: 35; CHECK-NEXT: lea %s1, 256 36; CHECK-NEXT: lvl %s1 37; CHECK-NEXT: vld %v0, 8, %s0 38; CHECK-NEXT: b.l.t (, %s10) 39 %r = load <256 x double>, ptr %P, align 4 40 ret <256 x double> %r 41} 42 43; Function Attrs: nounwind 44define fastcc <256 x double> @vec_mload_pt_v256f64(ptr %P, <256 x double> %PT, <256 x i1> %M) { 45; CHECK-LABEL: vec_mload_pt_v256f64: 46; CHECK: # %bb.0: 47; CHECK-NEXT: lea %s1, 256 48; CHECK-NEXT: lvl %s1 49; CHECK-NEXT: vseq %v1 50; CHECK-NEXT: vmulu.l %v1, 8, %v1, %vm1 51; CHECK-NEXT: vaddu.l %v1, %s0, %v1, %vm1 52; CHECK-NEXT: vgt %v1, %v1, 0, 0, %vm1 53; CHECK-NEXT: vmrg %v0, %v0, %v1, %vm1 54; CHECK-NEXT: b.l.t (, %s10) 55 %r = call <256 x double> @llvm.masked.load.v256f64.p0(ptr %P, i32 16, <256 x i1> %M, <256 x double> %PT) 56 ret <256 x double> %r 57} 58 59 60declare <256 x float> @llvm.masked.load.v256f32.p0(ptr %0, i32 immarg %1, <256 x i1> %2, <256 x float> %3) #0 61 62; Function Attrs: nounwind 63define fastcc <256 x float> @vec_mload_v256f32(ptr %P, <256 x i1> %M) { 64; CHECK-LABEL: vec_mload_v256f32: 65; CHECK: # %bb.0: 66; CHECK-NEXT: lea %s1, 256 67; CHECK-NEXT: lvl %s1 68; CHECK-NEXT: vseq %v0 69; CHECK-NEXT: vmulu.l %v0, 4, %v0, %vm1 70; CHECK-NEXT: vaddu.l %v0, %s0, %v0, %vm1 71; CHECK-NEXT: vgtu %v0, %v0, 0, 0, %vm1 72; CHECK-NEXT: b.l.t (, %s10) 73 %r = call <256 x float> @llvm.masked.load.v256f32.p0(ptr %P, i32 16, <256 x i1> %M, <256 x float> undef) 74 ret <256 x float> %r 75} 76 77; Function Attrs: nounwind 78define fastcc <256 x float> @vec_mload_pt_v256f32(ptr %P, <256 x float> %PT, <256 x i1> %M) { 79; CHECK-LABEL: vec_mload_pt_v256f32: 80; CHECK: # %bb.0: 81; CHECK-NEXT: lea %s1, 256 82; CHECK-NEXT: lvl %s1 83; CHECK-NEXT: vseq %v1 84; CHECK-NEXT: vmulu.l %v1, 4, %v1, %vm1 85; CHECK-NEXT: vaddu.l %v1, %s0, %v1, %vm1 86; CHECK-NEXT: vgtu %v1, %v1, 0, 0, %vm1 87; CHECK-NEXT: vmrg %v0, %v0, %v1, %vm1 88; CHECK-NEXT: b.l.t (, %s10) 89 %r = call <256 x float> @llvm.masked.load.v256f32.p0(ptr %P, i32 16, <256 x i1> %M, <256 x float> %PT) 90 ret <256 x float> %r 91} 92 93 94declare <256 x i32> @llvm.masked.load.v256i32.p0(ptr %0, i32 immarg %1, <256 x i1> %2, <256 x i32> %3) #0 95 96; Function Attrs: nounwind 97define fastcc <256 x i32> @vec_mload_v256i32(ptr %P, <256 x i1> %M) { 98; CHECK-LABEL: vec_mload_v256i32: 99; CHECK: # %bb.0: 100; CHECK-NEXT: lea %s1, 256 101; CHECK-NEXT: lvl %s1 102; CHECK-NEXT: vseq %v0 103; CHECK-NEXT: vmulu.l %v0, 4, %v0, %vm1 104; CHECK-NEXT: vaddu.l %v0, %s0, %v0, %vm1 105; CHECK-NEXT: vgtl.zx %v0, %v0, 0, 0, %vm1 106; CHECK-NEXT: b.l.t (, %s10) 107 %r = call <256 x i32> @llvm.masked.load.v256i32.p0(ptr %P, i32 16, <256 x i1> %M, <256 x i32> undef) 108 ret <256 x i32> %r 109} 110 111; Function Attrs: nounwind 112define fastcc <256 x i32> @vec_mload_pt_v256i32(ptr %P, <256 x i32> %PT, <256 x i1> %M) { 113; CHECK-LABEL: vec_mload_pt_v256i32: 114; CHECK: # %bb.0: 115; CHECK-NEXT: lea %s1, 256 116; CHECK-NEXT: lvl %s1 117; CHECK-NEXT: vseq %v1 118; CHECK-NEXT: vmulu.l %v1, 4, %v1, %vm1 119; CHECK-NEXT: vaddu.l %v1, %s0, %v1, %vm1 120; CHECK-NEXT: vgtl.zx %v1, %v1, 0, 0, %vm1 121; CHECK-NEXT: vmrg %v0, %v0, %v1, %vm1 122; CHECK-NEXT: b.l.t (, %s10) 123 %r = call <256 x i32> @llvm.masked.load.v256i32.p0(ptr %P, i32 16, <256 x i1> %M, <256 x i32> %PT) 124 ret <256 x i32> %r 125} 126 127attributes #0 = { argmemonly nounwind readonly willreturn } 128