brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.0 KiB · 98a9fa5 Raw
144 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 42; RUN: opt -passes='print<access-info>' -disable-output %s 2>&1 | FileCheck %s3 4target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"5 6declare void @llvm.assume(i1)7 8; FIXME: Currently we check all accesses to the same underlying objects, but9; it is sufficient to check the accesses to %A.10define void @test_dependence_with_non_constant_offset_and_other_accesses_to_noalias_pointers(ptr %A, ptr noalias %B, i64 %off) {11; CHECK-LABEL: 'test_dependence_with_non_constant_offset_and_other_accesses_to_noalias_pointers'12; CHECK-NEXT:    loop:13; CHECK-NEXT:      Memory dependences are safe with run-time checks14; CHECK-NEXT:      Dependences:15; CHECK-NEXT:      Run-time memory checks:16; CHECK-NEXT:      Check 0:17; CHECK-NEXT:        Comparing group GRP0:18; CHECK-NEXT:          %gep.A.400 = getelementptr inbounds i32, ptr %A.off, i64 %iv19; CHECK-NEXT:        Against group GRP1:20; CHECK-NEXT:          %gep.A = getelementptr inbounds i8, ptr %A, i64 %iv21; CHECK-NEXT:      Check 1:22; CHECK-NEXT:        Comparing group GRP2:23; CHECK-NEXT:          %gep.B = getelementptr inbounds i8, ptr %B, i64 %iv24; CHECK-NEXT:        Against group GRP3:25; CHECK-NEXT:          %gep.B.1 = getelementptr inbounds i8, ptr %B, i64 %iv.next26; CHECK-NEXT:      Grouped accesses:27; CHECK-NEXT:        Group GRP0:28; CHECK-NEXT:          (Low: (%off + %A) High: (404 + %off + %A))29; CHECK-NEXT:            Member: {(%off + %A),+,4}<nw><%loop>30; CHECK-NEXT:        Group GRP1:31; CHECK-NEXT:          (Low: %A High: (101 + %A))32; CHECK-NEXT:            Member: {%A,+,1}<nuw><%loop>33; CHECK-NEXT:        Group GRP2:34; CHECK-NEXT:          (Low: %B High: (101 + %B))35; CHECK-NEXT:            Member: {%B,+,1}<nuw><%loop>36; CHECK-NEXT:        Group GRP3:37; CHECK-NEXT:          (Low: (1 + %B)<nuw> High: (102 + %B))38; CHECK-NEXT:            Member: {(1 + %B)<nuw>,+,1}<nuw><%loop>39; CHECK-EMPTY:40; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.41; CHECK-NEXT:      SCEV assumptions:42; CHECK-EMPTY:43; CHECK-NEXT:      Expressions re-written:44;45entry:46  %c = icmp sgt i64 %off, 047  call void @llvm.assume(i1 %c)48  %A.off = getelementptr inbounds i8, ptr %A, i64 %off49  br label %loop50 51loop:52  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]53  %gep.A.400 = getelementptr inbounds i32, ptr %A.off, i64 %iv54  %gep.A = getelementptr inbounds i8, ptr %A, i64 %iv55  %l = load i8, ptr %gep.A, align 156  %ext = zext i8 %l to i3257  store i32 %ext, ptr %gep.A.400, align 458  %iv.next = add nuw nsw i64 %iv, 159  %gep.B.1 = getelementptr inbounds i8, ptr %B, i64 %iv.next60  %l.2 = load i8, ptr %gep.B.161  %gep.B = getelementptr inbounds i8, ptr %B, i64 %iv62  store i8 %l.2, ptr %gep.B63  %ec = icmp eq i64 %iv, 10064  br i1 %ec, label %exit, label %loop65 66exit:67  ret void68}69 70define void @test_dependence_with_non_constant_offset_and_other_accesses_to_mayalias_pointers(ptr %A, ptr %B, i64 %off) {71; CHECK-LABEL: 'test_dependence_with_non_constant_offset_and_other_accesses_to_mayalias_pointers'72; CHECK-NEXT:    loop:73; CHECK-NEXT:      Memory dependences are safe with run-time checks74; CHECK-NEXT:      Dependences:75; CHECK-NEXT:      Run-time memory checks:76; CHECK-NEXT:      Check 0:77; CHECK-NEXT:        Comparing group GRP0:78; CHECK-NEXT:          %gep.A.400 = getelementptr inbounds i32, ptr %A.off, i64 %iv79; CHECK-NEXT:        Against group GRP1:80; CHECK-NEXT:          %gep.B = getelementptr inbounds i8, ptr %B, i64 %iv81; CHECK-NEXT:      Check 1:82; CHECK-NEXT:        Comparing group GRP0:83; CHECK-NEXT:          %gep.A.400 = getelementptr inbounds i32, ptr %A.off, i64 %iv84; CHECK-NEXT:        Against group GRP2:85; CHECK-NEXT:          %gep.A = getelementptr inbounds i8, ptr %A, i64 %iv86; CHECK-NEXT:      Check 2:87; CHECK-NEXT:        Comparing group GRP0:88; CHECK-NEXT:          %gep.A.400 = getelementptr inbounds i32, ptr %A.off, i64 %iv89; CHECK-NEXT:        Against group GRP3:90; CHECK-NEXT:          %gep.B.1 = getelementptr inbounds i8, ptr %B, i64 %iv.next91; CHECK-NEXT:      Check 3:92; CHECK-NEXT:        Comparing group GRP1:93; CHECK-NEXT:          %gep.B = getelementptr inbounds i8, ptr %B, i64 %iv94; CHECK-NEXT:        Against group GRP2:95; CHECK-NEXT:          %gep.A = getelementptr inbounds i8, ptr %A, i64 %iv96; CHECK-NEXT:      Check 4:97; CHECK-NEXT:        Comparing group GRP1:98; CHECK-NEXT:          %gep.B = getelementptr inbounds i8, ptr %B, i64 %iv99; CHECK-NEXT:        Against group GRP3:100; CHECK-NEXT:          %gep.B.1 = getelementptr inbounds i8, ptr %B, i64 %iv.next101; CHECK-NEXT:      Grouped accesses:102; CHECK-NEXT:        Group GRP0:103; CHECK-NEXT:          (Low: (%off + %A) High: (404 + %off + %A))104; CHECK-NEXT:            Member: {(%off + %A),+,4}<nw><%loop>105; CHECK-NEXT:        Group GRP1:106; CHECK-NEXT:          (Low: %B High: (101 + %B))107; CHECK-NEXT:            Member: {%B,+,1}<nuw><%loop>108; CHECK-NEXT:        Group GRP2:109; CHECK-NEXT:          (Low: %A High: (101 + %A))110; CHECK-NEXT:            Member: {%A,+,1}<nuw><%loop>111; CHECK-NEXT:        Group GRP3:112; CHECK-NEXT:          (Low: (1 + %B)<nuw> High: (102 + %B))113; CHECK-NEXT:            Member: {(1 + %B)<nuw>,+,1}<nuw><%loop>114; CHECK-EMPTY:115; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.116; CHECK-NEXT:      SCEV assumptions:117; CHECK-EMPTY:118; CHECK-NEXT:      Expressions re-written:119;120entry:121  %c = icmp sgt i64 %off, 0122  call void @llvm.assume(i1 %c)123  %A.off = getelementptr inbounds i8, ptr %A, i64 %off124  br label %loop125 126loop:127  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]128  %gep.A.400 = getelementptr inbounds i32, ptr %A.off, i64 %iv129  %gep.A = getelementptr inbounds i8, ptr %A, i64 %iv130  %l = load i8, ptr %gep.A, align 1131  %ext = zext i8 %l to i32132  store i32 %ext, ptr %gep.A.400, align 4133  %iv.next = add nuw nsw i64 %iv, 1134  %gep.B.1 = getelementptr inbounds i8, ptr %B, i64 %iv.next135  %l.2 = load i8, ptr %gep.B.1136  %gep.B = getelementptr inbounds i8, ptr %B, i64 %iv137  store i8 %l.2, ptr %gep.B138  %ec = icmp eq i64 %iv, 100139  br i1 %ec, label %exit, label %loop140 141exit:142  ret void143}144