100 lines · plain
1; RUN: opt -disable-output -passes='print<access-info><allow-partial>,print<access-info>' %s 2>&1 | FileCheck %s --check-prefixes=ALLOW-BEFORE2; RUN: opt -disable-output -passes='print<access-info>,print<access-info><allow-partial>' %s 2>&1 | FileCheck %s --check-prefixes=ALLOW-AFTER3 4; Check that we get the right results when loop access analysis is run twice,5; once without partial results and once with.6 7target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"8 9define void @gep_loaded_offset(ptr %p, ptr %q, ptr %r, i32 %n) {10; ALLOW-BEFORE-LABEL: 'gep_loaded_offset'11; ALLOW-BEFORE-NEXT: while.body:12; ALLOW-BEFORE-NEXT: Report: cannot identify array bounds13; ALLOW-BEFORE-NEXT: Dependences:14; ALLOW-BEFORE-NEXT: Run-time memory checks:15; ALLOW-BEFORE-NEXT: Check 0:16; ALLOW-BEFORE-NEXT: Comparing group GRP0:17; ALLOW-BEFORE-NEXT: %p.addr = phi ptr [ %incdec.ptr, %while.body ], [ %p, %entry ]18; ALLOW-BEFORE-NEXT: Against group GRP1:19; ALLOW-BEFORE-NEXT: ptr %r20; ALLOW-BEFORE-NEXT: Grouped accesses:21; ALLOW-BEFORE-NEXT: Group GRP0:22; ALLOW-BEFORE-NEXT: (Low: %p High: (4 + (4 * (zext i32 (-1 + %n)<nsw> to i64))<nuw><nsw> + %p))23; ALLOW-BEFORE-NEXT: Member: {%p,+,4}<nuw><%while.body>24; ALLOW-BEFORE-NEXT: Group GRP1:25; ALLOW-BEFORE-NEXT: (Low: %r High: (8 + %r))26; ALLOW-BEFORE-NEXT: Member: %r27; ALLOW-BEFORE-NEXT: Generated run-time checks are incomplete28; ALLOW-BEFORE-EMPTY:29; ALLOW-BEFORE-NEXT: Non vectorizable stores to invariant address were not found in loop.30; ALLOW-BEFORE-NEXT: SCEV assumptions:31; ALLOW-BEFORE-EMPTY:32; ALLOW-BEFORE-NEXT: Expressions re-written:33;34; ALLOW-BEFORE-LABEL: 'gep_loaded_offset'35; ALLOW-BEFORE-NEXT: while.body:36; ALLOW-BEFORE-NEXT: Report: cannot identify array bounds37; ALLOW-BEFORE-NEXT: Dependences:38; ALLOW-BEFORE-NEXT: Run-time memory checks:39; ALLOW-BEFORE-NEXT: Grouped accesses:40; ALLOW-BEFORE-EMPTY:41; ALLOW-BEFORE-NEXT: Non vectorizable stores to invariant address were not found in loop.42; ALLOW-BEFORE-NEXT: SCEV assumptions:43; ALLOW-BEFORE-EMPTY:44; ALLOW-BEFORE-NEXT: Expressions re-written:45;46; ALLOW-AFTER-LABEL: 'gep_loaded_offset'47; ALLOW-AFTER-NEXT: while.body:48; ALLOW-AFTER-NEXT: Report: cannot identify array bounds49; ALLOW-AFTER-NEXT: Dependences:50; ALLOW-AFTER-NEXT: Run-time memory checks:51; ALLOW-AFTER-NEXT: Grouped accesses:52; ALLOW-AFTER-EMPTY:53; ALLOW-AFTER-NEXT: Non vectorizable stores to invariant address were not found in loop.54; ALLOW-AFTER-NEXT: SCEV assumptions:55; ALLOW-AFTER-EMPTY:56; ALLOW-AFTER-NEXT: Expressions re-written:57;58; ALLOW-AFTER-LABEL: 'gep_loaded_offset'59; ALLOW-AFTER-NEXT: while.body:60; ALLOW-AFTER-NEXT: Report: cannot identify array bounds61; ALLOW-AFTER-NEXT: Dependences:62; ALLOW-AFTER-NEXT: Run-time memory checks:63; ALLOW-AFTER-NEXT: Check 0:64; ALLOW-AFTER-NEXT: Comparing group GRP0:65; ALLOW-AFTER-NEXT: %p.addr = phi ptr [ %incdec.ptr, %while.body ], [ %p, %entry ]66; ALLOW-AFTER-NEXT: Against group GRP1:67; ALLOW-AFTER-NEXT: ptr %r68; ALLOW-AFTER-NEXT: Grouped accesses:69; ALLOW-AFTER-NEXT: Group GRP0:70; ALLOW-AFTER-NEXT: (Low: %p High: (4 + (4 * (zext i32 (-1 + %n)<nsw> to i64))<nuw><nsw> + %p))71; ALLOW-AFTER-NEXT: Member: {%p,+,4}<nuw><%while.body>72; ALLOW-AFTER-NEXT: Group GRP1:73; ALLOW-AFTER-NEXT: (Low: %r High: (8 + %r))74; ALLOW-AFTER-NEXT: Member: %r75; ALLOW-AFTER-NEXT: Generated run-time checks are incomplete76; ALLOW-AFTER-EMPTY:77; ALLOW-AFTER-NEXT: Non vectorizable stores to invariant address were not found in loop.78; ALLOW-AFTER-NEXT: SCEV assumptions:79; ALLOW-AFTER-EMPTY:80; ALLOW-AFTER-NEXT: Expressions re-written:81;82entry:83 br label %while.body84 85while.body:86 %n.addr = phi i32 [ %dec, %while.body ], [ %n, %entry ]87 %p.addr = phi ptr [ %incdec.ptr, %while.body ], [ %p, %entry ]88 %dec = add nsw i32 %n.addr, -189 %rval = load i64, ptr %r, align 490 %arrayidx = getelementptr inbounds i32, ptr %q, i64 %rval91 %val = load i32, ptr %arrayidx, align 492 %incdec.ptr = getelementptr inbounds nuw i8, ptr %p.addr, i64 493 store i32 %val, ptr %p.addr, align 494 %tobool.not = icmp eq i32 %dec, 095 br i1 %tobool.not, label %while.end, label %while.body96 97while.end:98 ret void99}100