[NFC] [Fortran Support] Cleanup Fortran Array pattern mactch testcases

- Move the testcases to ScopInfo/ since the processing takes place in
  ScopBuilder.

- Cleanup testcases, run -polly-canonicalize on them, find minimal set
  of opt parameters.

llvm-svn: 302886
This commit is contained in:
Siddharth Bhat 2017-05-12 09:37:39 +00:00
parent a1149e01d2
commit c05fcc0d9e
2 changed files with 62 additions and 87 deletions

View File

@ -1,9 +1,6 @@
; RUN: opt -S -polly-detect-fortran-arrays -analyze -polly-process-unprofitable \
; RUN: -polly-remarks-minimal -polly-canonicalize -polly-scops \
; RUN: -polly-dependences -polly-canonicalize \
; RUN: -polly-allow-nonaffine -polly-ignore-aliasing \
; RUN: -polly-invariant-load-hoisting < %s| FileCheck %s
;
; RUN: opt -analyze -S -polly-detect-fortran-arrays \
; RUN: -polly-process-unprofitable -polly-scops < %s | FileCheck %s
; MODULE src_soil
; USE data_parameters, ONLY : &
; wp, & ! KIND-type parameter for real variables
@ -23,6 +20,7 @@
; END SUBROUTINE terra1
; END MODULE src_soil
target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-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"
@ -41,74 +39,50 @@ module asm "\09.ident\09\22GCC: (GNU) 4.6.4 LLVM: 3.3.1\22"
; Function Attrs: nounwind uwtable
define void @__src_soil_MOD_terra1(i32* noalias nocapture %n) unnamed_addr #0 {
entry:
br label %entry.split
entry.split: ; preds = %entry
store i64 537, i64* getelementptr inbounds (%"struct.array1_real(kind=8)", %"struct.array1_real(kind=8)"* @__src_soil_MOD_xdzs, i64 0, i32 2), align 16, !tbaa !0
store i64 1, i64* getelementptr inbounds (%"struct.array1_real(kind=8)", %"struct.array1_real(kind=8)"* @__src_soil_MOD_xdzs, i64 0, i32 3, i64 0, i32 1), align 8, !tbaa !0
%0 = load i32, i32* %n, align 4, !tbaa !3
%1 = sext i32 %0 to i64
store i64 %1, i64* getelementptr inbounds (%"struct.array1_real(kind=8)", %"struct.array1_real(kind=8)"* @__src_soil_MOD_xdzs, i64 0, i32 3, i64 0, i32 2), align 8, !tbaa !0
store i64 1, i64* getelementptr inbounds (%"struct.array1_real(kind=8)", %"struct.array1_real(kind=8)"* @__src_soil_MOD_xdzs, i64 0, i32 3, i64 0, i32 0), align 8, !tbaa !0
%2 = icmp slt i32 %0, 0
%3 = select i1 %2, i64 0, i64 %1
%4 = icmp eq i64 %3, 0
br i1 %4, label %"16", label %"8"
"8": ; preds = %entry
%5 = sdiv i64 9223372036854775807, %1
%6 = icmp slt i64 %5, 1
%7 = icmp slt i32 %0, 1
%8 = shl nsw i64 %3, 3
%.2 = select i1 %7, i64 0, i64 %8
br i1 %6, label %"15", label %"16"
"15": ; preds = %"8"
unreachable
"16": ; preds = %"8", %entry
%.24 = phi i64 [ %.2, %"8" ], [ 0, %entry ]
%9 = load i8*, i8** getelementptr inbounds (%"struct.array1_real(kind=8)", %"struct.array1_real(kind=8)"* @__src_soil_MOD_xdzs, i64 0, i32 0), align 32, !tbaa !5
%10 = icmp eq i8* %9, null
br i1 %10, label %"17", label %"20"
"17": ; preds = %"16"
%11 = icmp ne i64 %.24, 0
%12 = select i1 %11, i64 %.24, i64 1
%13 = tail call noalias i8* @malloc(i64 %12) #2 ;<= 1. malloc
%14 = icmp eq i8* %13, null
br i1 %14, label %"18", label %"19"
"18": ; preds = %"17"
unreachable
"19": ; preds = %"17"
store i8* %13, i8** getelementptr inbounds (%"struct.array1_real(kind=8)", %"struct.array1_real(kind=8)"* @__src_soil_MOD_xdzs, i64 0, i32 0), align 32, !tbaa !5
%2 = icmp slt i32 %0, 1
%3 = zext i32 %0 to i64
%4 = shl nuw nsw i64 %3, 3
%.24 = select i1 %2, i64 0, i64 %4
%5 = icmp ne i64 %.24, 0
%6 = select i1 %5, i64 %.24, i64 1
%7 = tail call noalias i8* @malloc(i64 %6) #2
store i8* %7, i8** getelementptr inbounds (%"struct.array1_real(kind=8)", %"struct.array1_real(kind=8)"* @__src_soil_MOD_xdzs, i64 0, i32 0), align 32, !tbaa !5
store i64 -1, i64* getelementptr inbounds (%"struct.array1_real(kind=8)", %"struct.array1_real(kind=8)"* @__src_soil_MOD_xdzs, i64 0, i32 1), align 8, !tbaa !0
%15 = icmp sgt i32 %0, 1
br i1 %15, label %"21.preheader", label %return
%8 = icmp sgt i32 %0, 1
br i1 %8, label %"21.preheader", label %return
"21.preheader": ; preds = %"19"
%16 = bitcast i8* %13 to double* ;<= 2. bitcast to double*
%17 = add i32 %0, 1
"21.preheader": ; preds = %entry.split
%9 = bitcast i8* %7 to double*
%10 = add i32 %0, 1
br label %"21"
"20": ; preds = %"16"
unreachable
"21": ; preds = %"21", %"21.preheader"
%18 = phi double [ undef, %"21.preheader" ], [ %23, %"21" ]
%11 = phi double [ undef, %"21.preheader" ], [ %16, %"21" ]
%indvars.iv = phi i64 [ 2, %"21.preheader" ], [ %indvars.iv.next, %"21" ]
%19 = add nsw i64 %indvars.iv, -1
%20 = getelementptr inbounds double, double* %16, i64 %19 ;<= 3. GEP
%21 = load double, double* %20, align 8, !tbaa !7
%22 = fmul double %21, %21
%23 = fadd double %22, %18
store double %23, double* %20, align 8, !tbaa !7 ;<= 4. store
%indvars.iv.next = add i64 %indvars.iv, 1
%lftr.wideiv = trunc i64 %indvars.iv.next to i32
%exitcond = icmp eq i32 %lftr.wideiv, %17
br i1 %exitcond, label %return, label %"21"
%12 = add nsw i64 %indvars.iv, -1
%13 = getelementptr inbounds double, double* %9, i64 %12
%14 = load double, double* %13, align 8, !tbaa !7
%15 = fmul double %14, %14
%16 = fadd double %11, %15
store double %16, double* %13, align 8, !tbaa !7
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
%lftr.wideiv1 = trunc i64 %indvars.iv.next to i32
%exitcond2 = icmp eq i32 %lftr.wideiv1, %10
br i1 %exitcond2, label %return.loopexit, label %"21"
return: ; preds = %"21", %"19"
return.loopexit: ; preds = %"21"
br label %return
return: ; preds = %return.loopexit, %entry.split
ret void
}
@ -127,7 +101,6 @@ declare void @_gfortran_runtime_error_at(i8*, i8*, ...) #1
attributes #0 = { nounwind uwtable }
attributes #1 = { noreturn }
attributes #2 = { nounwind }
attributes #3 = { noreturn nounwind }
!0 = !{!1, !1, i64 0}
!1 = !{!"alias set 4: integer(kind=8)", !2}

View File

@ -1,9 +1,6 @@
; RUN: opt -S -polly-detect-fortran-arrays -analyze -polly-process-unprofitable \
; RUN: -polly-remarks-minimal -polly-canonicalize -polly-scops \
; RUN: -polly-dependences -polly-canonicalize \
; RUN: -polly-allow-nonaffine -polly-ignore-aliasing \
; RUN: -polly-invariant-load-hoisting < %s| FileCheck %s
;
; RUN: opt -analyze -S -polly-detect-fortran-arrays \
; RUN: -polly-process-unprofitable -polly-scops < %s | FileCheck %s
; MODULE src_soil
; USE data_parameters, ONLY : &
; wp, & ! KIND-type parameter for real variables
@ -38,35 +35,40 @@ module asm "\09.ident\09\22GCC: (GNU) 4.6.4 LLVM: 3.3.1\22"
; Function Attrs: nounwind uwtable
define void @__src_soil_MOD_terra1(i32* noalias nocapture %n) unnamed_addr #0 {
entry:
br label %entry.split
entry.split: ; preds = %entry
%0 = load i32, i32* %n, align 4, !tbaa !0
%1 = icmp sgt i32 %0, 21
br i1 %1, label %"3.preheader", label %return
"3.preheader": ; preds = %entry
"3.preheader": ; preds = %entry.split
%2 = load i64, i64* getelementptr inbounds (%"struct.array1_real(kind=8)", %"struct.array1_real(kind=8)"* @__src_soil_MOD_xdzs, i64 0, i32 1), align 8, !tbaa !3
%3 = load i8*, i8** getelementptr inbounds (%"struct.array1_real(kind=8)", %"struct.array1_real(kind=8)"* @__src_soil_MOD_xdzs, i64 0, i32 0), align 32, !tbaa !5
%4 = bitcast i8* %3 to double*
%5 = add i32 %0, 1
%3 = load double*, double** bitcast (%"struct.array1_real(kind=8)"* @__src_soil_MOD_xdzs to double**), align 32, !tbaa !5
%4 = add i32 %0, 1
br label %"3"
"3": ; preds = %"3", %"3.preheader"
%indvars.iv = phi i64 [ 22, %"3.preheader" ], [ %indvars.iv.next, %"3" ]
%6 = add nsw i64 %indvars.iv, %2
%7 = getelementptr inbounds double, double* %4, i64 %6
%8 = load double, double* %7, align 8, !tbaa !7
%9 = fmul double %8, %8
%10 = add nsw i64 %indvars.iv, -1
%11 = add nsw i64 %10, %2
%12 = getelementptr inbounds double, double* %4, i64 %11
%13 = load double, double* %12, align 8, !tbaa !7
%14 = fadd double %9, %13
store double %14, double* %7, align 8, !tbaa !7
%indvars.iv.next = add i64 %indvars.iv, 1
%lftr.wideiv = trunc i64 %indvars.iv.next to i32
%exitcond = icmp eq i32 %lftr.wideiv, %5
br i1 %exitcond, label %return, label %"3"
%5 = add nsw i64 %indvars.iv, %2
%6 = getelementptr inbounds double, double* %3, i64 %5
%7 = load double, double* %6, align 8, !tbaa !7
%8 = fmul double %7, %7
%9 = add i64 %2, -1
%10 = add i64 %9, %indvars.iv
%11 = getelementptr inbounds double, double* %3, i64 %10
%12 = load double, double* %11, align 8, !tbaa !7
%13 = fadd double %8, %12
store double %13, double* %6, align 8, !tbaa !7
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
%lftr.wideiv1 = trunc i64 %indvars.iv.next to i32
%exitcond2 = icmp eq i32 %lftr.wideiv1, %4
br i1 %exitcond2, label %return.loopexit, label %"3"
return: ; preds = %"3", %entry
return.loopexit: ; preds = %"3"
br label %return
return: ; preds = %return.loopexit, %entry.split
ret void
}