brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.8 KiB · da63a67 Raw
312 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s3; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme -force-streaming < %s | FileCheck %s4 5;6; Testing prfop encodings7;8define void @test_svprf_pldl1strm(<vscale x 16 x i1> %pg, ptr %base) {9; CHECK-LABEL: test_svprf_pldl1strm:10; CHECK:       // %bb.0: // %entry11; CHECK-NEXT:    prfb pldl1strm, p0, [x0]12; CHECK-NEXT:    ret13entry:14  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %base, i32 1)15  ret void16}17 18define void @test_svprf_pldl2keep(<vscale x 16 x i1> %pg, ptr %base) {19; CHECK-LABEL: test_svprf_pldl2keep:20; CHECK:       // %bb.0: // %entry21; CHECK-NEXT:    prfb pldl2keep, p0, [x0]22; CHECK-NEXT:    ret23entry:24  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %base, i32 2)25  ret void26}27 28define void @test_svprf_pldl2strm(<vscale x 16 x i1> %pg, ptr %base) {29; CHECK-LABEL: test_svprf_pldl2strm:30; CHECK:       // %bb.0: // %entry31; CHECK-NEXT:    prfb pldl2strm, p0, [x0]32; CHECK-NEXT:    ret33entry:34  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %base, i32 3)35  ret void36}37 38define void @test_svprf_pldl3keep(<vscale x 16 x i1> %pg, ptr %base) {39; CHECK-LABEL: test_svprf_pldl3keep:40; CHECK:       // %bb.0: // %entry41; CHECK-NEXT:    prfb pldl3keep, p0, [x0]42; CHECK-NEXT:    ret43entry:44  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %base, i32 4)45  ret void46}47 48define void @test_svprf_pldl3strm(<vscale x 16 x i1> %pg, ptr %base) {49; CHECK-LABEL: test_svprf_pldl3strm:50; CHECK:       // %bb.0: // %entry51; CHECK-NEXT:    prfb pldl3strm, p0, [x0]52; CHECK-NEXT:    ret53entry:54  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %base, i32 5)55  ret void56}57 58define void @test_svprf_pstl1keep(<vscale x 16 x i1> %pg, ptr %base) {59; CHECK-LABEL: test_svprf_pstl1keep:60; CHECK:       // %bb.0: // %entry61; CHECK-NEXT:    prfb pstl1keep, p0, [x0]62; CHECK-NEXT:    ret63entry:64  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %base, i32 8)65  ret void66}67 68define void @test_svprf_pstl1strm(<vscale x 16 x i1> %pg, ptr %base) {69; CHECK-LABEL: test_svprf_pstl1strm:70; CHECK:       // %bb.0: // %entry71; CHECK-NEXT:    prfb pstl1strm, p0, [x0]72; CHECK-NEXT:    ret73entry:74  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %base, i32 9)75  ret void76}77 78define void @test_svprf_pstl2keep(<vscale x 16 x i1> %pg, ptr %base) {79; CHECK-LABEL: test_svprf_pstl2keep:80; CHECK:       // %bb.0: // %entry81; CHECK-NEXT:    prfb pstl2keep, p0, [x0]82; CHECK-NEXT:    ret83entry:84  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %base, i32 10)85  ret void86}87 88define void @test_svprf_pstl2strm(<vscale x 16 x i1> %pg, ptr %base) {89; CHECK-LABEL: test_svprf_pstl2strm:90; CHECK:       // %bb.0: // %entry91; CHECK-NEXT:    prfb pstl2strm, p0, [x0]92; CHECK-NEXT:    ret93entry:94  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %base, i32 11)95  ret void96}97 98define void @test_svprf_pstl3keep(<vscale x 16 x i1> %pg, ptr %base) {99; CHECK-LABEL: test_svprf_pstl3keep:100; CHECK:       // %bb.0: // %entry101; CHECK-NEXT:    prfb pstl3keep, p0, [x0]102; CHECK-NEXT:    ret103entry:104  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %base, i32 12)105  ret void106}107 108define void @test_svprf_pstl3strm(<vscale x 16 x i1> %pg, ptr %base) {109; CHECK-LABEL: test_svprf_pstl3strm:110; CHECK:       // %bb.0: // %entry111; CHECK-NEXT:    prfb pstl3strm, p0, [x0]112; CHECK-NEXT:    ret113entry:114  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %base, i32 13)115  ret void116}117 118;119; Testing imm limits of SI form120;121 122define void @test_svprf_vnum_under(<vscale x 16 x i1> %pg, ptr %base) {123; CHECK-LABEL: test_svprf_vnum_under:124; CHECK:       // %bb.0: // %entry125; CHECK-NEXT:    rdvl x8, #1126; CHECK-NEXT:    mov x9, #-528127; CHECK-NEXT:    lsr x8, x8, #4128; CHECK-NEXT:    mul x8, x8, x9129; CHECK-NEXT:    prfb pstl3strm, p0, [x0, x8]130; CHECK-NEXT:    ret131entry:132  %gep = getelementptr inbounds <vscale x 16 x i8>, ptr %base, i64 -33, i64 0133  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %gep, i32 13)134  ret void135}136 137define void @test_svprf_vnum_min(<vscale x 16 x i1> %pg, ptr %base) {138; CHECK-LABEL: test_svprf_vnum_min:139; CHECK:       // %bb.0: // %entry140; CHECK-NEXT:    prfb pstl3strm, p0, [x0, #-32, mul vl]141; CHECK-NEXT:    ret142entry:143  %gep = getelementptr inbounds <vscale x 16 x i8>, ptr %base, i64 -32, i64 0144  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %gep, i32 13)145  ret void146}147 148define void @test_svprf_vnum_over(<vscale x 16 x i1> %pg, ptr %base) {149; CHECK-LABEL: test_svprf_vnum_over:150; CHECK:       // %bb.0: // %entry151; CHECK-NEXT:    rdvl x8, #1152; CHECK-NEXT:    mov w9, #512153; CHECK-NEXT:    lsr x8, x8, #4154; CHECK-NEXT:    mul x8, x8, x9155; CHECK-NEXT:    prfb pstl3strm, p0, [x0, x8]156; CHECK-NEXT:    ret157entry:158  %gep = getelementptr inbounds <vscale x 16 x i8>, ptr %base, i64 32, i64 0159  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %gep, i32 13)160  ret void161}162 163define void @test_svprf_vnum_max(<vscale x 16 x i1> %pg, ptr %base) {164; CHECK-LABEL: test_svprf_vnum_max:165; CHECK:       // %bb.0: // %entry166; CHECK-NEXT:    prfb pstl3strm, p0, [x0, #31, mul vl]167; CHECK-NEXT:    ret168entry:169  %gep = getelementptr inbounds <vscale x 16 x i8>, ptr %base, i64 31, i64 0170  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %gep, i32 13)171  ret void172}173 174;175; scalar contiguous176;177 178define void @test_svprfb(<vscale x 16 x i1> %pg, ptr %base) {179; CHECK-LABEL: test_svprfb:180; CHECK:       // %bb.0: // %entry181; CHECK-NEXT:    prfb pldl1keep, p0, [x0]182; CHECK-NEXT:    ret183entry:184  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %base, i32 0)185  ret void186}187 188define void @test_svprfh(<vscale x 8 x i1> %pg, ptr %base) {189; CHECK-LABEL: test_svprfh:190; CHECK:       // %bb.0: // %entry191; CHECK-NEXT:    prfh pldl1keep, p0, [x0]192; CHECK-NEXT:    ret193entry:194  tail call void @llvm.aarch64.sve.prf.nxv8i1(<vscale x 8 x i1> %pg, ptr %base, i32 0)195  ret void196}197 198define void @test_svprfw(<vscale x 4 x i1> %pg, ptr %base) {199; CHECK-LABEL: test_svprfw:200; CHECK:       // %bb.0: // %entry201; CHECK-NEXT:    prfw pldl1keep, p0, [x0]202; CHECK-NEXT:    ret203entry:204  tail call void @llvm.aarch64.sve.prf.nxv4i1(<vscale x 4 x i1> %pg, ptr %base, i32 0)205  ret void206}207 208define void @test_svprfd(<vscale x 2 x i1> %pg, ptr %base) {209; CHECK-LABEL: test_svprfd:210; CHECK:       // %bb.0: // %entry211; CHECK-NEXT:    prfd pldl1keep, p0, [x0]212; CHECK-NEXT:    ret213entry:214  tail call void @llvm.aarch64.sve.prf.nxv2i1(<vscale x 2 x i1> %pg, ptr %base, i32 0)215  ret void216}217 218;219; scalar + imm contiguous220;221; imm form of prfb is tested above222 223define void @test_svprfh_vnum(<vscale x 8 x i1> %pg, ptr %base) {224; CHECK-LABEL: test_svprfh_vnum:225; CHECK:       // %bb.0: // %entry226; CHECK-NEXT:    prfh pstl3strm, p0, [x0, #31, mul vl]227; CHECK-NEXT:    ret228entry:229  %gep = getelementptr <vscale x 8 x i16>, ptr %base, i64 31230  %addr = bitcast ptr %gep to ptr231  tail call void @llvm.aarch64.sve.prf.nxv8i1(<vscale x 8 x i1> %pg, ptr %addr, i32 13)232  ret void233}234 235define void @test_svprfw_vnum(<vscale x 4 x i1> %pg, ptr %base) {236; CHECK-LABEL: test_svprfw_vnum:237; CHECK:       // %bb.0: // %entry238; CHECK-NEXT:    prfw pstl3strm, p0, [x0, #31, mul vl]239; CHECK-NEXT:    ret240entry:241  %gep = getelementptr <vscale x 4 x i32>, ptr %base, i64 31242  %addr = bitcast ptr %gep to ptr243  tail call void @llvm.aarch64.sve.prf.nxv4i1(<vscale x 4 x i1> %pg, ptr %addr, i32 13)244  ret void245}246 247define void @test_svprfd_vnum(<vscale x 2 x i1> %pg, ptr %base) {248; CHECK-LABEL: test_svprfd_vnum:249; CHECK:       // %bb.0: // %entry250; CHECK-NEXT:    prfd pstl3strm, p0, [x0, #31, mul vl]251; CHECK-NEXT:    ret252entry:253  %gep = getelementptr <vscale x 2 x i64>, ptr %base, i64 31254  %addr = bitcast ptr %gep to ptr255  tail call void @llvm.aarch64.sve.prf.nxv2i1(<vscale x 2 x i1> %pg, ptr %addr, i32 13)256  ret void257}258 259;260; scalar + scaled scalar contiguous261;262 263define void @test_svprfb_ss(<vscale x 16 x i1> %pg, ptr %base, i64 %offset) {264; CHECK-LABEL: test_svprfb_ss:265; CHECK:       // %bb.0: // %entry266; CHECK-NEXT:    prfb pstl3strm, p0, [x0, x1]267; CHECK-NEXT:    ret268entry:269  %addr = getelementptr i8, ptr %base, i64 %offset270  tail call void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1> %pg, ptr %addr, i32 13)271  ret void272}273 274define void @test_svprfh_ss(<vscale x 8 x i1> %pg, ptr %base, i64 %offset) {275; CHECK-LABEL: test_svprfh_ss:276; CHECK:       // %bb.0: // %entry277; CHECK-NEXT:    prfh pstl3strm, p0, [x0, x1, lsl #1]278; CHECK-NEXT:    ret279entry:280  %gep = getelementptr i16, ptr %base, i64 %offset281  tail call void @llvm.aarch64.sve.prf.nxv8i1(<vscale x 8 x i1> %pg, ptr %gep, i32 13)282  ret void283}284 285define void @test_svprfw_ss(<vscale x 4 x i1> %pg, ptr %base, i64 %offset) {286; CHECK-LABEL: test_svprfw_ss:287; CHECK:       // %bb.0: // %entry288; CHECK-NEXT:    prfw pstl3strm, p0, [x0, x1, lsl #2]289; CHECK-NEXT:    ret290entry:291  %gep = getelementptr i32, ptr %base, i64 %offset292  tail call void @llvm.aarch64.sve.prf.nxv4i1(<vscale x 4 x i1> %pg, ptr %gep, i32 13)293  ret void294}295 296define void @test_svprfd_ss(<vscale x 2 x i1> %pg, ptr %base, i64 %offset) {297; CHECK-LABEL: test_svprfd_ss:298; CHECK:       // %bb.0: // %entry299; CHECK-NEXT:    prfd pstl3strm, p0, [x0, x1, lsl #3]300; CHECK-NEXT:    ret301entry:302  %gep = getelementptr i64, ptr %base, i64 %offset303  tail call void @llvm.aarch64.sve.prf.nxv2i1(<vscale x 2 x i1> %pg, ptr %gep, i32 13)304  ret void305}306 307 308declare void @llvm.aarch64.sve.prf.nxv16i1(<vscale x 16 x i1>, ptr, i32)309declare void @llvm.aarch64.sve.prf.nxv8i1(<vscale x 8 x i1>,  ptr, i32)310declare void @llvm.aarch64.sve.prf.nxv4i1(<vscale x 4 x i1>,  ptr, i32)311declare void @llvm.aarch64.sve.prf.nxv2i1(<vscale x 2 x i1>,  ptr, i32)312