brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.4 KiB · 4792975 Raw
173 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=x86_64-linux-gnu -run-pass=none -o - %s | FileCheck %s3--- |4  ; ModuleID = 'test/CodeGen/X86/memcpy-scoped-aa.ll'5  source_filename = "test/CodeGen/X86/memcpy-scoped-aa.ll"6  target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"7  target triple = "x86_64-unknown-linux-gnu"8 9  define i32 @test_memcpy(ptr nocapture %p, ptr nocapture readonly %q) {10    %p0 = bitcast ptr %p to ptr11    %add.ptr = getelementptr inbounds i32, ptr %p, i64 412    %p1 = bitcast ptr %add.ptr to ptr13    tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %p0, ptr noundef nonnull align 4 dereferenceable(16) %p1, i64 16, i1 false), !alias.scope !0, !noalias !314    %v0 = load i32, ptr %q, align 4, !alias.scope !3, !noalias !015    %q1 = getelementptr inbounds i32, ptr %q, i64 116    %v1 = load i32, ptr %q1, align 4, !alias.scope !3, !noalias !017    %add = add i32 %v0, %v118    ret i32 %add19  }20 21  define i32 @test_memcpy_inline(ptr nocapture %p, ptr nocapture readonly %q) {22    %p0 = bitcast ptr %p to ptr23    %add.ptr = getelementptr inbounds i32, ptr %p, i64 424    %p1 = bitcast ptr %add.ptr to ptr25    tail call void @llvm.memcpy.inline.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %p0, ptr noundef nonnull align 4 dereferenceable(16) %p1, i64 16, i1 false), !alias.scope !0, !noalias !326    %v0 = load i32, ptr %q, align 4, !alias.scope !3, !noalias !027    %q1 = getelementptr inbounds i32, ptr %q, i64 128    %v1 = load i32, ptr %q1, align 4, !alias.scope !3, !noalias !029    %add = add i32 %v0, %v130    ret i32 %add31  }32 33  define i32 @test_mempcpy(ptr nocapture %p, ptr nocapture readonly %q) {34    %p0 = bitcast ptr %p to ptr35    %add.ptr = getelementptr inbounds i32, ptr %p, i64 436    %p1 = bitcast ptr %add.ptr to ptr37    %call = tail call ptr @mempcpy(ptr noundef nonnull align 4 dereferenceable(16) %p0, ptr noundef nonnull align 4 dereferenceable(16) %p1, i64 16), !alias.scope !0, !noalias !338    %v0 = load i32, ptr %q, align 4, !alias.scope !3, !noalias !039    %q1 = getelementptr inbounds i32, ptr %q, i64 140    %v1 = load i32, ptr %q1, align 4, !alias.scope !3, !noalias !041    %add = add i32 %v0, %v142    ret i32 %add43  }44 45  ; Function Attrs: argmemonly nofree nounwind willreturn46  declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #047 48  ; Function Attrs: argmemonly nofree nounwind willreturn49  declare void @llvm.memcpy.inline.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64 immarg, i1 immarg) #050 51  declare ptr @mempcpy(ptr, ptr, i64)52 53  attributes #0 = { argmemonly nofree nounwind willreturn }54 55  !0 = !{!1}56  !1 = distinct !{!1, !2, !"bax: %p"}57  !2 = distinct !{!2, !"bax"}58  !3 = !{!4}59  !4 = distinct !{!4, !2, !"bax: %q"}60 61...62---63name:            test_memcpy64machineMetadataNodes:65  - '!7 = distinct !{!7, !"MemcpyLoweringDomain"}'66  - '!9 = distinct !{!9, !7, !"Dst"}'67  - '!8 = !{!4, !9}'68  - '!5 = !{!1, !6}'69  - '!6 = distinct !{!6, !7, !"Src"}'70  - '!11 = !{!4, !6}'71  - '!10 = !{!1, !9}'72body:             |73  bb.0 (%ir-block.0):74    liveins: $rdi, $rsi75 76    ; CHECK-LABEL: name: test_memcpy77    ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi78    ; CHECK: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi79    ; CHECK: [[MOV64rm:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 4, !alias.scope !5, !noalias !8)80    ; CHECK: [[MOV64rm1:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 4, !alias.scope !5, !noalias !8)81    ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 8, $noreg, killed [[MOV64rm1]] :: (store (s64) into %ir.p0 + 8, align 4, !alias.scope !10, !noalias !11)82    ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 0, $noreg, killed [[MOV64rm]] :: (store (s64) into %ir.p0, align 4, !alias.scope !10, !noalias !11)83    ; CHECK: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)84    ; CHECK: [[ADD32rm:%[0-9]+]]:gr32 = ADD32rm [[MOV32rm]], [[COPY]], 1, $noreg, 4, $noreg, implicit-def dead $eflags :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)85    ; CHECK: $eax = COPY [[ADD32rm]]86    ; CHECK: RET 0, $eax87    %1:gr64 = COPY $rsi88    %0:gr64 = COPY $rdi89    %2:gr64 = MOV64rm %0, 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 4, !alias.scope !5, !noalias !8)90    %3:gr64 = MOV64rm %0, 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 4, !alias.scope !5, !noalias !8)91    MOV64mr %0, 1, $noreg, 8, $noreg, killed %3 :: (store (s64) into %ir.p0 + 8, align 4, !alias.scope !10, !noalias !11)92    MOV64mr %0, 1, $noreg, 0, $noreg, killed %2 :: (store (s64) into %ir.p0, align 4, !alias.scope !10, !noalias !11)93    %4:gr32 = MOV32rm %1, 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)94    %5:gr32 = ADD32rm %4, %1, 1, $noreg, 4, $noreg, implicit-def dead $eflags :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)95    $eax = COPY %596    RET 0, $eax97 98...99---100name:            test_memcpy_inline101machineMetadataNodes:102  - '!8 = !{!4, !9}'103  - '!9 = distinct !{!9, !7, !"Dst"}'104  - '!5 = !{!1, !6}'105  - '!7 = distinct !{!7, !"MemcpyLoweringDomain"}'106  - '!11 = !{!4, !6}'107  - '!10 = !{!1, !9}'108  - '!6 = distinct !{!6, !7, !"Src"}'109body:             |110  bb.0 (%ir-block.0):111    liveins: $rdi, $rsi112 113    ; CHECK-LABEL: name: test_memcpy_inline114    ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi115    ; CHECK: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi116    ; CHECK: [[MOV64rm:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 4, !alias.scope !5, !noalias !8)117    ; CHECK: [[MOV64rm1:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 4, !alias.scope !5, !noalias !8)118    ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 8, $noreg, killed [[MOV64rm1]] :: (store (s64) into %ir.p0 + 8, align 4, !alias.scope !10, !noalias !11)119    ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 0, $noreg, killed [[MOV64rm]] :: (store (s64) into %ir.p0, align 4, !alias.scope !10, !noalias !11)120    ; CHECK: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)121    ; CHECK: [[ADD32rm:%[0-9]+]]:gr32 = ADD32rm [[MOV32rm]], [[COPY]], 1, $noreg, 4, $noreg, implicit-def dead $eflags :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)122    ; CHECK: $eax = COPY [[ADD32rm]]123    ; CHECK: RET 0, $eax124    %1:gr64 = COPY $rsi125    %0:gr64 = COPY $rdi126    %2:gr64 = MOV64rm %0, 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 4, !alias.scope !5, !noalias !8)127    %3:gr64 = MOV64rm %0, 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 4, !alias.scope !5, !noalias !8)128    MOV64mr %0, 1, $noreg, 8, $noreg, killed %3 :: (store (s64) into %ir.p0 + 8, align 4, !alias.scope !10, !noalias !11)129    MOV64mr %0, 1, $noreg, 0, $noreg, killed %2 :: (store (s64) into %ir.p0, align 4, !alias.scope !10, !noalias !11)130    %4:gr32 = MOV32rm %1, 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)131    %5:gr32 = ADD32rm %4, %1, 1, $noreg, 4, $noreg, implicit-def dead $eflags :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)132    $eax = COPY %5133    RET 0, $eax134 135...136---137name:            test_mempcpy138machineMetadataNodes:139  - '!5 = !{!1, !6}'140  - '!8 = !{!4, !9}'141  - '!11 = !{!4, !6}'142  - '!10 = !{!1, !9}'143  - '!7 = distinct !{!7, !"MemcpyLoweringDomain"}'144  - '!6 = distinct !{!6, !7, !"Src"}'145  - '!9 = distinct !{!9, !7, !"Dst"}'146body:             |147  bb.0 (%ir-block.0):148    liveins: $rdi, $rsi149 150    ; CHECK-LABEL: name: test_mempcpy151    ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi152    ; CHECK: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi153    ; CHECK: [[MOV64rm:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 1, !alias.scope !5, !noalias !8)154    ; CHECK: [[MOV64rm1:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 1, !alias.scope !5, !noalias !8)155    ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 8, $noreg, killed [[MOV64rm1]] :: (store (s64) into %ir.p0 + 8, align 1, !alias.scope !10, !noalias !11)156    ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 0, $noreg, killed [[MOV64rm]] :: (store (s64) into %ir.p0, align 1, !alias.scope !10, !noalias !11)157    ; CHECK: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)158    ; CHECK: [[ADD32rm:%[0-9]+]]:gr32 = ADD32rm [[MOV32rm]], [[COPY]], 1, $noreg, 4, $noreg, implicit-def dead $eflags :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)159    ; CHECK: $eax = COPY [[ADD32rm]]160    ; CHECK: RET 0, $eax161    %1:gr64 = COPY $rsi162    %0:gr64 = COPY $rdi163    %2:gr64 = MOV64rm %0, 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 1, !alias.scope !5, !noalias !8)164    %3:gr64 = MOV64rm %0, 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 1, !alias.scope !5, !noalias !8)165    MOV64mr %0, 1, $noreg, 8, $noreg, killed %3 :: (store (s64) into %ir.p0 + 8, align 1, !alias.scope !10, !noalias !11)166    MOV64mr %0, 1, $noreg, 0, $noreg, killed %2 :: (store (s64) into %ir.p0, align 1, !alias.scope !10, !noalias !11)167    %4:gr32 = MOV32rm %1, 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)168    %5:gr32 = ADD32rm %4, %1, 1, $noreg, 4, $noreg, implicit-def dead $eflags :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)169    $eax = COPY %5170    RET 0, $eax171 172...173