brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.8 KiB · 45de520 Raw
118 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=memcpyopt,dce -S -verify-memoryssa | FileCheck %s3 4; Negative test5; Check this test is not transformed into memset, or cause a compiler warning6; warning: Compiler has made implicit assumption that TypeSize is not scalable. This may or may not lead to broken code.7 8define void @foo(ptr %p) {9; CHECK-LABEL: @foo(10; CHECK-NEXT:    store <vscale x 16 x i8> zeroinitializer, ptr [[P:%.*]], align 1611; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr <vscale x 16 x i8>, ptr [[P]], i64 112; CHECK-NEXT:    store <vscale x 16 x i8> zeroinitializer, ptr [[TMP1]], align 1613; CHECK-NEXT:    ret void14;15  store <vscale x 16 x i8> zeroinitializer, ptr %p16  %tmp1 = getelementptr <vscale x 16 x i8>, ptr %p, i64 117  store <vscale x 16 x i8> zeroinitializer, ptr %tmp118  ret void19}20 21; Test the compiler does not crash on a store of a scalable aggregate type.22define void @test_no_crash_scalable_agg(ptr %p) {23; CHECK-LABEL: @test_no_crash_scalable_agg(24; CHECK-NEXT:  entry:25; CHECK-NEXT:    store { <vscale x 16 x i1>, <vscale x 16 x i1> } zeroinitializer, ptr [[P:%.*]], align 226; CHECK-NEXT:    ret void27;28entry:29  store { <vscale x 16 x i1>, <vscale x 16 x i1> } zeroinitializer, ptr %p, align 230  ret void31}32 33; Positive test34 35define void @memset_vscale_index_zero(ptr %p, i8 %z) {36; CHECK-LABEL: @memset_vscale_index_zero(37; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr align 1 [[P:%.*]], i8 [[Z:%.*]], i64 17, i1 false)38; CHECK-NEXT:    ret void39;40  store i8 %z, ptr %p41  %tmp1 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 142  store i8 %z, ptr %tmp143  %tmp2 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 244  store i8 %z, ptr %tmp245  %tmp3 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 346  store i8 %z, ptr %tmp347  %tmp4 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 448  store i8 %z, ptr %tmp449  %tmp5 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 550  store i8 %z, ptr %tmp551  %tmp6 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 652  store i8 %z, ptr %tmp653  %tmp7 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 754  store i8 %z, ptr %tmp755  %tmp8 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 856  store i8 %z, ptr %tmp857  %tmp9 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 958  store i8 %z, ptr %tmp959  %tmp10 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 1060  store i8 %z, ptr %tmp1061  %tmp11 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 1162  store i8 %z, ptr %tmp1163  %tmp12 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 1264  store i8 %z, ptr %tmp1265  %tmp13 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 1366  store i8 %z, ptr %tmp1367  %tmp14 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 1468  store i8 %z, ptr %tmp1469  %tmp15 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 1570  store i8 %z, ptr %tmp1571  %tmp16 = getelementptr <vscale x 16 x i8>, ptr %p, i32 0, i32 1672  store i8 %z, ptr %tmp1673  ret void74}75 76define void @memset_vscale_index_nonzero(ptr %p, i8 %z) {77; CHECK-LABEL: @memset_vscale_index_nonzero(78; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr <vscale x 16 x i8>, ptr [[P:%.*]], i32 1, i32 079; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr align 1 [[TMP0]], i8 [[Z:%.*]], i64 17, i1 false)80; CHECK-NEXT:    ret void81;82  %tmp0 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 083  store i8 %z, ptr %tmp084  %tmp1 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 185  store i8 %z, ptr %tmp186  %tmp2 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 287  store i8 %z, ptr %tmp288  %tmp3 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 389  store i8 %z, ptr %tmp390  %tmp4 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 491  store i8 %z, ptr %tmp492  %tmp5 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 593  store i8 %z, ptr %tmp594  %tmp6 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 695  store i8 %z, ptr %tmp696  %tmp7 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 797  store i8 %z, ptr %tmp798  %tmp8 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 899  store i8 %z, ptr %tmp8100  %tmp9 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 9101  store i8 %z, ptr %tmp9102  %tmp10 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 10103  store i8 %z, ptr %tmp10104  %tmp11 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 11105  store i8 %z, ptr %tmp11106  %tmp12 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 12107  store i8 %z, ptr %tmp12108  %tmp13 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 13109  store i8 %z, ptr %tmp13110  %tmp14 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 14111  store i8 %z, ptr %tmp14112  %tmp15 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 15113  store i8 %z, ptr %tmp15114  %tmp16 = getelementptr <vscale x 16 x i8>, ptr %p, i32 1, i32 16115  store i8 %z, ptr %tmp16116  ret void117}118