Commit f8c12980 authored by Tobias Grosser's avatar Tobias Grosser
Browse files

Test that independent block pass does not transform induction variables

The original test case showed a problem with the independet blocks pass and
we decided to XFAIL it for now. Unfortunately the failure is not detected if
we build without asserts and the verification of the independent block pass
is not run. This change tests now for the actual reason of the failure and
should trigger even in a non asserts build. We did not yet solve the underlying
bug, but this should at least make the test suite behavior consistent.

Merged from: https://llvm.org/svn/llvm-project/polly/trunk@183025

llvm-svn: 183384
parent d889a7bc
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
; RUN: opt %loadPolly -polly-independent -polly-codegen-scev %s | FileCheck %s
; XFAIL: *
;
; Ensure that the independent block pass does not invalidate the induction
; variable here.
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-unknown-linux-gnu"

define void @main() nounwind {
entry:
  br label %for.i

for.i:
  %indvar.i = phi i64 [ 0, %entry ], [ %indvar.next.i, %for.i.backedge ]
  br i1 true, label %for.j.preheader, label %for.j2

for.j.preheader:
  br label %for.j

for.j:
  %indvar.j = phi i64 [ %indvar.next.j, %for.j ], [ 0, %for.j.preheader ]
  %indvar.next.j = add i64 %indvar.j, 1
  %exitcond.j = icmp eq i64 %indvar.next.j, 0
  br i1 %exitcond.j, label %for.j2, label %for.j

for.j2:
  fence seq_cst
  br label %for.i.backedge

for.i.backedge:
  %indvar.next.i = add i64 %indvar.i, 1
  %exitcond.i = icmp eq i64 %indvar.next.i, 2048
  br i1 %exitcond.i, label %for.i, label %.end

.end:
  ret void
}

; CHECK: %indvar.j = phi i64 [ %indvar.next.j, %for.j ], [ 0, %for.j.preheader ]
+0 −37
Original line number Diff line number Diff line
; RUN: opt %loadPolly -polly-codegen-isl -polly-codegen-scev %s
; -polly-independent causes: Cannot generate independent blocks
;
; XFAIL:*
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-unknown-linux-gnu"

define void @main() nounwind {
.split:
  br label %.start

.start:
  %indvar15 = phi i64 [ 0, %.split ], [ %indvar.next16, %.loopexit ]
  %tmp25 = add i64 %indvar15, 1
  br i1 true, label %.preheader, label %.loop2

.preheader:
  br label %.loop1

.loop1:
  %indvar33 = phi i64 [ %indvar.next34, %.loop1 ], [ 0, %.preheader ]
  %indvar.next34 = add i64 %indvar33, 1
  %exitcond40 = icmp eq i64 %indvar.next34, 0
  br i1 %exitcond40, label %.loop2, label %.loop1

.loop2:
  %exitcond26.old = icmp eq i64 undef, %tmp25
  br i1 false, label %.loopexit, label %.loop2

.loopexit:
  %indvar.next16 = add i64 %indvar15, 1
  %exitcond53 = icmp eq i64 %indvar.next16, 2048
  br i1 %exitcond53, label %.start, label %.end

.end:
  ret void
}