brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · 468b225 Raw
131 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 6; TODO: No runtime checks should be needed, as the distance between accesses7; is large enough to need runtime checks.8define void @test_distance_positive_independent_via_trip_count(ptr %A) {9; CHECK-LABEL: 'test_distance_positive_independent_via_trip_count'10; CHECK-NEXT:    loop:11; CHECK-NEXT:      Memory dependences are safe12; CHECK-NEXT:      Dependences:13; CHECK-NEXT:      Run-time memory checks:14; CHECK-NEXT:      Grouped accesses:15; CHECK-EMPTY:16; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.17; CHECK-NEXT:      SCEV assumptions:18; CHECK-EMPTY:19; CHECK-NEXT:      Expressions re-written:20;21entry:22  %A.400 = getelementptr inbounds i8, ptr %A, i64 40023  br label %loop24 25loop:26  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]27  %gep.A.400 = getelementptr inbounds i32, ptr %A.400, i64 %iv28  %gep.A = getelementptr inbounds i8, ptr %A, i64 %iv29  %l = load i8, ptr %gep.A, align 130  %ext = zext i8 %l to i3231  store i32 %ext, ptr %gep.A.400, align 432  %iv.next = add nuw nsw i64 %iv, 133  %ec = icmp eq i64 %iv, 10034  br i1 %ec, label %exit, label %loop35 36exit:37  ret void38}39 40; TODO: Currently this is considered vectorizable with runtime checks, but the41; runtime checks are never true.42define void @test_distance_positive_backwards(ptr %A) {43; CHECK-LABEL: 'test_distance_positive_backwards'44; CHECK-NEXT:    loop:45; CHECK-NEXT:      Memory dependences are safe with run-time checks46; CHECK-NEXT:      Dependences:47; CHECK-NEXT:      Run-time memory checks:48; CHECK-NEXT:      Check 0:49; CHECK-NEXT:        Comparing group GRP0:50; CHECK-NEXT:          %gep.A.400 = getelementptr inbounds i32, ptr %A.1, i64 %iv51; CHECK-NEXT:        Against group GRP1:52; CHECK-NEXT:          %gep.A = getelementptr inbounds i8, ptr %A, i64 %iv53; CHECK-NEXT:      Grouped accesses:54; CHECK-NEXT:        Group GRP0:55; CHECK-NEXT:          (Low: (1 + %A)<nuw> High: (405 + %A))56; CHECK-NEXT:            Member: {(1 + %A)<nuw>,+,4}<nuw><%loop>57; CHECK-NEXT:        Group GRP1:58; CHECK-NEXT:          (Low: %A High: (101 + %A))59; CHECK-NEXT:            Member: {%A,+,1}<nuw><%loop>60; CHECK-EMPTY:61; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.62; CHECK-NEXT:      SCEV assumptions:63; CHECK-EMPTY:64; CHECK-NEXT:      Expressions re-written:65;66entry:67  %A.1 = getelementptr inbounds i8, ptr %A, i64 168  br label %loop69 70loop:71  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]72  %gep.A.400 = getelementptr inbounds i32, ptr %A.1, i64 %iv73  %gep.A = getelementptr inbounds i8, ptr %A, i64 %iv74  %l = load i8, ptr %gep.A, align 175  %ext = zext i8 %l to i3276  store i32 %ext, ptr %gep.A.400, align 477  %iv.next = add nuw nsw i64 %iv, 178  %ec = icmp eq i64 %iv, 10079  br i1 %ec, label %exit, label %loop80 81exit:82  ret void83}84 85define void @test_distance_positive_via_assume(ptr %A, i64 %off) {86; CHECK-LABEL: 'test_distance_positive_via_assume'87; CHECK-NEXT:    loop:88; CHECK-NEXT:      Memory dependences are safe with run-time checks89; CHECK-NEXT:      Dependences:90; CHECK-NEXT:      Run-time memory checks:91; CHECK-NEXT:      Check 0:92; CHECK-NEXT:        Comparing group GRP0:93; CHECK-NEXT:          %gep.A.400 = getelementptr inbounds i32, ptr %A.off, i64 %iv94; CHECK-NEXT:        Against group GRP1:95; CHECK-NEXT:          %gep.A = getelementptr inbounds i8, ptr %A, i64 %iv96; CHECK-NEXT:      Grouped accesses:97; CHECK-NEXT:        Group GRP0:98; CHECK-NEXT:          (Low: (%off + %A) High: (404 + %off + %A))99; CHECK-NEXT:            Member: {(%off + %A),+,4}<nw><%loop>100; CHECK-NEXT:        Group GRP1:101; CHECK-NEXT:          (Low: %A High: (101 + %A))102; CHECK-NEXT:            Member: {%A,+,1}<nuw><%loop>103; CHECK-EMPTY:104; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.105; CHECK-NEXT:      SCEV assumptions:106; CHECK-EMPTY:107; CHECK-NEXT:      Expressions re-written:108;109entry:110  %c = icmp sgt i64 %off, 0111  call void @llvm.assume(i1 %c)112  %A.off = getelementptr inbounds i8, ptr %A, i64 %off113  br label %loop114 115loop:116  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]117  %gep.A.400 = getelementptr inbounds i32, ptr %A.off, i64 %iv118  %gep.A = getelementptr inbounds i8, ptr %A, i64 %iv119  %l = load i8, ptr %gep.A, align 1120  %ext = zext i8 %l to i32121  store i32 %ext, ptr %gep.A.400, align 4122  %iv.next = add nuw nsw i64 %iv, 1123  %ec = icmp eq i64 %iv, 100124  br i1 %ec, label %exit, label %loop125 126exit:127  ret void128}129 130declare void @llvm.assume(i1)131