Prepare unit tests for update to ISL 0.16
ISL 0.16 will change how sets are printed which breaks 117 unit tests that text-compare printed sets. This patch re-formats most of these unit tests using a script and small manual editing on top of that. When actually updating ISL, most work is done by just re-running the script to adapt to the changed output. Some tests that compare IR and tests with single CHECK-lines that can be easily updated manually are not included here. The re-format script will also be committed afterwards. The per-test formatter invocation command lines options will not be added in the near future because it is ad hoc and would overwrite the manual edits. Ideally it also shouldn't be required anymore because ISL's set printing has become more stable in 0.16. Differential Revision: http://reviews.llvm.org/D16095 llvm-svn: 257851
This commit is contained in:
		
							parent
							
								
									81e2e9ef86
								
							
						
					
					
						commit
						5a9a65e43f
					
				| 
						 | 
				
			
			@ -50,22 +50,16 @@ exit.3:
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; VALUE: region: 'S1 => exit.3' in function 'sequential_writes':
 | 
			
		||||
; VALUE:   RAW dependences:
 | 
			
		||||
; VALUE:     {  }
 | 
			
		||||
; VALUE:   WAR dependences:
 | 
			
		||||
; VALUE:     {  }
 | 
			
		||||
; VALUE:   WAW dependences:
 | 
			
		||||
; VALUE:     {
 | 
			
		||||
; VALUE:       Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0;
 | 
			
		||||
; VALUE:       Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0;
 | 
			
		||||
; VALUE:       Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 10
 | 
			
		||||
; VALUE:     }
 | 
			
		||||
; VALUE:      RAW dependences:
 | 
			
		||||
; VALUE-NEXT:     {  }
 | 
			
		||||
; VALUE-NEXT: WAR dependences:
 | 
			
		||||
; VALUE-NEXT:     {  }
 | 
			
		||||
; VALUE-NEXT: WAW dependences:
 | 
			
		||||
; VALUE-NEXT:     { Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0; Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 10 }
 | 
			
		||||
 | 
			
		||||
; TIMEOUT: region: 'S1 => exit.3' in function 'sequential_writes':
 | 
			
		||||
; TIMEOUT:   RAW dependences:
 | 
			
		||||
; TIMEOUT:     n/a
 | 
			
		||||
; TIMEOUT:   WAR dependences:
 | 
			
		||||
; TIMEOUT:     n/a
 | 
			
		||||
; TIMEOUT:   WAW dependences:
 | 
			
		||||
; TIMEOUT:     n/a
 | 
			
		||||
; TIMEOUT:      RAW dependences:
 | 
			
		||||
; TIMEOUT-NEXT:     n/a
 | 
			
		||||
; TIMEOUT-NEXT: WAR dependences:
 | 
			
		||||
; TIMEOUT-NEXT:     n/a
 | 
			
		||||
; TIMEOUT-NEXT: WAW dependences:
 | 
			
		||||
; TIMEOUT-NEXT:     n/a
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,17 +64,16 @@ do.end45:                                         ; preds = %do.cond42
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; VALUE: RAW dependences:
 | 
			
		||||
; VALUE: { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, 1 + i2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 <= 34 and i2 >= 0 }
 | 
			
		||||
; VALUE: WAR dependences:
 | 
			
		||||
; VALUE: {  }
 | 
			
		||||
; VALUE: WAW dependences:
 | 
			
		||||
; VALUE: { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, 1 + i2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 <= 34 and i2 >= 0 }
 | 
			
		||||
; VALUE:      RAW dependences:
 | 
			
		||||
; VALUE-NEXT:     { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, 1 + i2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 <= 34 and i2 >= 0 }
 | 
			
		||||
; VALUE-NEXT: WAR dependences:
 | 
			
		||||
; VALUE-NEXT:     {  }
 | 
			
		||||
; VALUE-NEXT: WAW dependences:
 | 
			
		||||
; VALUE-NEXT:     { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, 1 + i2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 <= 34 and i2 >= 0 }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; MEMORY: RAW dependences:
 | 
			
		||||
; MEMORY:  { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, o2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 >= 0 and o2 >= 1 + i2 and o2 <= 35 and o2 >= 0 }
 | 
			
		||||
; MEMORY: WAR dependences:
 | 
			
		||||
; MEMORY:  { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, o2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 >= 0 and o2 >= 1 + i2 and o2 <= 35 and o2 >= 0 }
 | 
			
		||||
; MEMORY: WAW dependences:
 | 
			
		||||
; MEMORY:  { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, o2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 >= 0 and o2 >= 1 + i2 and o2 <= 35 and o2 >= 0 }
 | 
			
		||||
; MEMORY:      RAW dependences:
 | 
			
		||||
; MEMORY-NEXT:     { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, o2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 >= 0 and o2 >= 1 + i2 and o2 <= 35 and o2 >= 0 }
 | 
			
		||||
; MEMORY-NEXT: WAR dependences:
 | 
			
		||||
; MEMORY-NEXT:     { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, o2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 >= 0 and o2 >= 1 + i2 and o2 <= 35 and o2 >= 0 }
 | 
			
		||||
; MEMORY-NEXT: WAW dependences:
 | 
			
		||||
; MEMORY-NEXT:     { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, o2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 >= 0 and o2 >= 1 + i2 and o2 <= 35 and o2 >= 0 }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1,13 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK: RAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAR dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK:   { Stmt_for_body3[i0, i1] -> Stmt_for_body3[2 + i0, -1 + i1] : i0 <= 97 and i0 >= 0 and i1 <= 99 and i1 >= 1 }
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_for_body3[i0, i1] -> Stmt_for_body3[2 + i0, -1 + i1] : i0 <= 97 and i0 >= 0 and i1 <= 99 and i1 >= 1 }
 | 
			
		||||
;
 | 
			
		||||
; void f(int *sum) {
 | 
			
		||||
;   for (int i = 0; i < 100; i++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,14 +3,14 @@
 | 
			
		|||
; This loopnest contains a reduction which imposes the same dependences as the
 | 
			
		||||
; accesses to the array A. We need to ensure we keep the dependences of A.
 | 
			
		||||
;
 | 
			
		||||
; CHECK: RAW dependences:
 | 
			
		||||
; CHECK:   { Stmt_for_body[i0] -> Stmt_for_body[1 + i0] : i0 >= 0 and i0 <= 1022 }
 | 
			
		||||
; CHECK: WAR dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAW dependences:
 | 
			
		||||
; CHECK:   { Stmt_for_body[i0] -> Stmt_for_body[1 + i0] : i0 <= 1022 and i0 >= 0 }
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK:   { Stmt_for_body[i0] -> Stmt_for_body[1 + i0] : i0 <= 1022 and i0 >= 0 }
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_for_body[i0] -> Stmt_for_body[1 + i0] : i0 >= 0 and i0 <= 1022 }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_for_body[i0] -> Stmt_for_body[1 + i0] : i0 <= 1022 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_for_body[i0] -> Stmt_for_body[1 + i0] : i0 <= 1022 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
;
 | 
			
		||||
;    void AandSum(int *restrict sum, int *restrict A) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,13 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK: RAW dependences:
 | 
			
		||||
; CHECK-DAG: Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0 + i1, o1] : i1 <= 1023 - i0 and i1 >= 0 and i1 <= 1 and i0 >= 0 and o1 <= 511 and o1 >= 1 
 | 
			
		||||
; CHECK: WAR dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAW dependences:
 | 
			
		||||
; CHECK-DAG: Stmt_for_body3[i0, i1] -> Stmt_for_body3[1 + i0, -1 + i1] : i0 <= 1022 and i0 >= 0 and i1 <= 511 and i1 >= 2
 | 
			
		||||
; CHECK-DAG: Stmt_for_body3[i0, 2] -> Stmt_for_body3[2 + i0, 0] : i0 <= 1021 and i0 >= 0
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK:   { Stmt_for_body3[i0, 1] -> Stmt_for_body3[1 + i0, 0] : i0 <= 1022 and i0 >= 0 }
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0 + i1, o1] : i1 <= 1023 - i0 and i1 >= 0 and i1 <= 1 and i0 >= 0 and o1 <= 511 and o1 >= 1 }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_for_body3[i0, i1] -> Stmt_for_body3[1 + i0, -1 + i1] : i0 <= 1022 and i0 >= 0 and i1 <= 511 and i1 >= 2; Stmt_for_body3[i0, 2] -> Stmt_for_body3[2 + i0, 0] : i0 <= 1021 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_for_body3[i0, 1] -> Stmt_for_body3[1 + i0, 0] : i0 <= 1022 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; void f(int *sum) {
 | 
			
		||||
;   for (int i = 0; i < 1024; i++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,8 +2,8 @@
 | 
			
		|||
;
 | 
			
		||||
; Verify that only the inner reduction like accesses cause reduction dependences
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK:   { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0, 1 + i1] : i0 <= 99 and i0 >= 0 and i1 <= 98 and i1 >= 0 }
 | 
			
		||||
; CHECK:      Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0, 1 + i1] : i0 <= 99 and i0 >= 0 and i1 <= 98 and i1 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; void f(int * restrict A, int * restrict sum) {
 | 
			
		||||
;   int i, j, k;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,13 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-dependences -analyze -basicaa < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK: RAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAR dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK-DAG: Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0, 1 + i1] : i0 <= 99 and i0 >= 0 and i1 <= 98 and i1 >= 0
 | 
			
		||||
; CHECK-DAG: Stmt_for_body3[i0, 99] -> Stmt_for_body3[1 + i0, 0] : i0 <= 98 and i0 >= 0
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0, 1 + i1] : i0 <= 99 and i0 >= 0 and i1 <= 98 and i1 >= 0; Stmt_for_body3[i0, 99] -> Stmt_for_body3[1 + i0, 0] : i0 <= 98 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; int f(int * restrict A, int * restrict sum) {
 | 
			
		||||
;   int i, j, k;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-dependences -analyze -basicaa < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK:   { Stmt_for_inc[i0, i1] -> Stmt_for_inc[i0, 1 + i1] : i0 <= 99 and i0 >= 0 and i1 <= 98 and i1 >= 0 }
 | 
			
		||||
; CHECK:      Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_for_inc[i0, i1] -> Stmt_for_inc[i0, 1 + i1] : i0 <= 99 and i0 >= 0 and i1 <= 98 and i1 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; int f(int * __restrict__ A) {
 | 
			
		||||
;   int i, j, sum = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,15 +2,14 @@
 | 
			
		|||
;
 | 
			
		||||
; Verify we do not have dependences between the if and the else clause
 | 
			
		||||
;
 | 
			
		||||
; CHECK: RAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAR dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK-DAG: Stmt_if_then[i0] -> Stmt_if_then[1 + i0] : i0 <= 510 and i0 >= 0
 | 
			
		||||
; CHECK-DAG: Stmt_if_else[i0] -> Stmt_if_else[1 + i0] : i0 <= 1022 and i0 >= 512
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_if_else[i0] -> Stmt_if_else[1 + i0] : i0 <= 1022 and i0 >= 512; Stmt_if_then[i0] -> Stmt_if_then[1 + i0] : i0 <= 510 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; void f(int *restrict sum, int *restrict prod) {
 | 
			
		||||
;   for (int i = 0; i < 1024; i++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,24 +1,22 @@
 | 
			
		|||
; RUN: opt %loadPolly -basicaa -polly-dependences -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK: RAW dependences:
 | 
			
		||||
; CHECK-DAG: Stmt_S2[i0, i1] -> Stmt_S3[i0] : i0 <= 1023 and i0 >= 0 and i1 <= 1023 and i1 >= 0
 | 
			
		||||
; CHECK-DAG: Stmt_S3[i0] -> Stmt_S0[1 + i0] : i0 <= 1022 and i0 >= 0
 | 
			
		||||
; CHECK-DAG: Stmt_S0[i0] -> Stmt_S1[i0, o1] : i0 <= 1023 and i0 >= 0 and o1 <= 1023 and o1 >= 0
 | 
			
		||||
;
 | 
			
		||||
; These are the important RAW dependences, as they need to originate/end in only one iteration:
 | 
			
		||||
; CHECK-DAG: Stmt_S1[i0, 1023] -> Stmt_S2[i0, o1] : i0 <= 1023 and i0 >= 0 and o1 <= 1023 and o1 >= 0
 | 
			
		||||
; CHECK-DAG: Stmt_S1[i0, i1] -> Stmt_S2[i0, 0] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0
 | 
			
		||||
; CHECK: WAR dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAW dependences:
 | 
			
		||||
; CHECK-DAG: Stmt_S2[i0, i1] -> Stmt_S3[i0] : i0 <= 1023 and i0 >= 0 and i1 <= 1023 and i1 >= 0
 | 
			
		||||
; CHECK-DAG: Stmt_S3[i0] -> Stmt_S0[1 + i0] : i0 <= 1022 and i0 >= 0
 | 
			
		||||
; CHECK-DAG: Stmt_S0[i0] -> Stmt_S1[i0, o1] : i0 <= 1023 and i0 >= 0 and o1 <= 1023 and o1 >= 0
 | 
			
		||||
;   Stmt_S1[i0, 1023] -> Stmt_S2[i0, o1]
 | 
			
		||||
;   Stmt_S1[i0, i1] -> Stmt_S2[i0, 0]
 | 
			
		||||
;
 | 
			
		||||
; These are the important WAW dependences, as they need to originate/end in only one iteration:
 | 
			
		||||
; CHECK-DAG: Stmt_S1[i0, 1023] -> Stmt_S2[i0, o1] : i0 <= 1023 and i0 >= 0 and o1 <= 1023 and o1 >= 0
 | 
			
		||||
; CHECK-DAG: Stmt_S1[i0, i1] -> Stmt_S2[i0, 0] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK-DAG:  Stmt_S1[i0, i1] -> Stmt_S1[i0, 1 + i1] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0
 | 
			
		||||
; CHECK-DAG:  Stmt_S2[i0, i1] -> Stmt_S2[i0, 1 + i1] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0
 | 
			
		||||
;   Stmt_S1[i0, 1023] -> Stmt_S2[i0, o1]
 | 
			
		||||
;   Stmt_S1[i0, i1] -> Stmt_S2[i0, 0]
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S0[i0] -> Stmt_S1[i0, o1] : i0 <= 1023 and i0 >= 0 and o1 <= 1023 and o1 >= 0; Stmt_S2[i0, i1] -> Stmt_S3[i0] : i0 <= 1023 and i0 >= 0 and i1 <= 1023 and i1 >= 0; Stmt_S3[i0] -> Stmt_S0[1 + i0] : i0 <= 1022 and i0 >= 0; Stmt_S1[i0, 1023] -> Stmt_S2[i0, o1] : i0 <= 1023 and i0 >= 0 and o1 <= 1023 and o1 >= 0; Stmt_S1[i0, i1] -> Stmt_S2[i0, 0] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0 }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S0[i0] -> Stmt_S1[i0, o1] : i0 <= 1023 and i0 >= 0 and o1 <= 1023 and o1 >= 0; Stmt_S2[i0, i1] -> Stmt_S3[i0] : i0 <= 1023 and i0 >= 0 and i1 <= 1023 and i1 >= 0; Stmt_S3[i0] -> Stmt_S0[1 + i0] : i0 <= 1022 and i0 >= 0; Stmt_S1[i0, 1023] -> Stmt_S2[i0, o1] : i0 <= 1023 and i0 >= 0 and o1 <= 1023 and o1 >= 0; Stmt_S1[i0, i1] -> Stmt_S2[i0, 0] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0 }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S1[i0, i1] -> Stmt_S1[i0, 1 + i1] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0; Stmt_S2[i0, i1] -> Stmt_S2[i0, 1 + i1] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
;    void f(int *restrict red) {
 | 
			
		||||
;      for (int j = 0; j < 1024; j++) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-dependences -analyze -basicaa < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK:   [N] -> { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0, 1 + i1] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0 and i1 >= 1024 - N + i0 }
 | 
			
		||||
; CHECK:      Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     [N] -> { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0, 1 + i1] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0 and i1 >= 1024 - N + i0 }
 | 
			
		||||
;
 | 
			
		||||
; void f(int N, int * restrict sums, int * restrict escape) {
 | 
			
		||||
;   for (int i = 0; i < 1024; i++) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,16 +1,13 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-DAG:    Stmt_S0[i0] -> Stmt_S1[o0, i0 - o0] : i0 <= 1023 and o0 >= 0 and o0 <= i0
 | 
			
		||||
; CHECK-DAG:     Stmt_S1[i0, i1] -> Stmt_S2[-1 + i0 + i1] : i1 <= 1023 and i1 >= 0 and i1 >= 1 - i0 and i0 >= 0 and i0 <= 1023 and i1 <= 1024 - i0 
 | 
			
		||||
; CHECK:      WAR dependences:
 | 
			
		||||
; CHECK-DAG:    Stmt_S2[i0] -> Stmt_S2[1 + i0] : i0 <= 1022 and i0 >= 0
 | 
			
		||||
; CHECK-DAG:    Stmt_S1[i0, i1] -> Stmt_S2[i0 + i1] : i1 <= 1023 - i0 and i1 >= 0 and i1 >= 1 - i0 and i0 >= 0 }
 | 
			
		||||
; CHECK:      WAW dependences:
 | 
			
		||||
; CHECK-DAG:    Stmt_S0[i0] -> Stmt_S1[o0, i0 - o0] : i0 <= 1023 and o0 >= 0 and o0 <= i0
 | 
			
		||||
; CHECK-DAG:    Stmt_S1[0, 0] -> Stmt_S2[0]
 | 
			
		||||
; CHECK:      Reduction dependences:
 | 
			
		||||
; CHECK-DAG:    Stmt_S1[i0, i1] -> Stmt_S1[1 + i0, -1 + i1] : i0 <= 1022 and i0 >= 0 and i1 <= 1023 and i1 >= 1
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S0[i0] -> Stmt_S1[o0, i0 - o0] : i0 <= 1023 and o0 >= 0 and o0 <= i0; Stmt_S1[i0, i1] -> Stmt_S2[-1 + i0 + i1] : i1 <= 1023 and i1 >= 0 and i1 >= 1 - i0 and i0 >= 0 and i0 <= 1023 and i1 <= 1024 - i0 }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S2[i0] -> Stmt_S2[1 + i0] : i0 <= 1022 and i0 >= 0; Stmt_S1[i0, i1] -> Stmt_S2[i0 + i1] : i1 <= 1023 - i0 and i1 >= 0 and i1 >= 1 - i0 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S0[i0] -> Stmt_S1[o0, i0 - o0] : i0 <= 1023 and o0 >= 0 and o0 <= i0; Stmt_S1[0, 0] -> Stmt_S2[0] }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S1[i0, i1] -> Stmt_S1[1 + i0, -1 + i1] : i0 <= 1022 and i0 >= 0 and i1 <= 1023 and i1 >= 1 }
 | 
			
		||||
;
 | 
			
		||||
;    void f(int *sum) {
 | 
			
		||||
;      for (int i = 0; i < 1024; i++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,16 +3,14 @@
 | 
			
		|||
; We have privatization dependences from a textually later statement to a
 | 
			
		||||
; textually earlier one, but the dependences still go forward in time.
 | 
			
		||||
;
 | 
			
		||||
;  CHECK: RAW dependences:
 | 
			
		||||
;  CHECK-DAG:  Stmt_S3[i0] -> Stmt_S2[1 + i0, o1] : i0 <= 97 and i0 >= 0 and o1 <= 99 and o1 >= 0
 | 
			
		||||
;  CHECK-DAG:  Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 98 and i0 >= 0
 | 
			
		||||
;  CHECK: WAR dependences:
 | 
			
		||||
;  CHECK:   {  }
 | 
			
		||||
;  CHECK: WAW dependences:
 | 
			
		||||
;  CHECK-DAG:  Stmt_S3[i0] -> Stmt_S2[1 + i0, o1] : i0 <= 97 and i0 >= 0 and o1 <= 99 and o1 >= 0
 | 
			
		||||
;  CHECK-DAG:  Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 98 and i0 >= 0
 | 
			
		||||
;  CHECK: Reduction dependences:
 | 
			
		||||
;  CHECK:   { Stmt_S2[i0, i1] -> Stmt_S2[i0, 1 + i1] : i0 <= 98 and i0 >= 0 and i1 <= 98 and i1 >= 0 }
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S3[i0] -> Stmt_S2[1 + i0, o1] : i0 <= 97 and i0 >= 0 and o1 <= 99 and o1 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 98 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S3[i0] -> Stmt_S2[1 + i0, o1] : i0 <= 97 and i0 >= 0 and o1 <= 99 and o1 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 98 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S2[i0, i1] -> Stmt_S2[i0, 1 + i1] : i0 <= 98 and i0 >= 0 and i1 <= 98 and i1 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
;    void f(int *sum) {
 | 
			
		||||
;      int i, j;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,18 +1,13 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
;  CHECK: RAW dependences:
 | 
			
		||||
;  CHECK-DAG:  Stmt_S2[i0, i1] -> Stmt_S3[o0] : o0 <= 1 and i1 <= 1 - i0 and o0 <= 1 + i0 - i1 and o0 >= 1 - i1
 | 
			
		||||
;  CHECK-DAG:  Stmt_S3[i0] -> Stmt_S2[o0, 1 - i0] : i0 <= 1 and i0 >= 0 and o0 >= 1 + i0 and o0 <= 98
 | 
			
		||||
;  CHECK-DAG:  Stmt_S1[i0] -> Stmt_S3[2 + i0] : i0 <= 96 and i0 >= 0
 | 
			
		||||
;  CHECK: WAR dependences:
 | 
			
		||||
;  CHECK:   {  }
 | 
			
		||||
;  CHECK: WAW dependences:
 | 
			
		||||
;  CHECK-DAG:  Stmt_S2[i0, i1] -> Stmt_S3[o0] : o0 <= 1 and i1 <= 1 - i0 and o0 <= 1 + i0 - i1 and o0 >= 1 - i1
 | 
			
		||||
;  CHECK-DAG:  Stmt_S3[i0] -> Stmt_S2[o0, 1 - i0] : i0 <= 1 and i0 >= 0 and o0 >= 1 + i0 and o0 <= 98
 | 
			
		||||
;  CHECK-DAG:  Stmt_S1[i0] -> Stmt_S3[2 + i0] : i0 <= 96 and i0 >= 0
 | 
			
		||||
;  CHECK: Reduction dependences:
 | 
			
		||||
;  CHECK-DAG:  Stmt_S2[i0, i1] -> Stmt_S2[1 + i0, i1] : i0 <= 97 and i0 >= 0 and i1 <= 98 - i0 and i1 >= 0 and i1 >= 2 - i0
 | 
			
		||||
;  CHECK-DAG:  Stmt_S2[0, 0] -> Stmt_S2[1, 0]
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S2[i0, i1] -> Stmt_S3[o0] : o0 <= 1 and i1 <= 1 - i0 and o0 <= 1 + i0 - i1 and o0 >= 1 - i1; Stmt_S3[i0] -> Stmt_S2[o0, 1 - i0] : i0 <= 1 and i0 >= 0 and o0 >= 1 + i0 and o0 <= 98; Stmt_S1[i0] -> Stmt_S3[2 + i0] : i0 <= 96 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S2[i0, i1] -> Stmt_S3[o0] : o0 <= 1 and i1 <= 1 - i0 and o0 <= 1 + i0 - i1 and o0 >= 1 - i1; Stmt_S3[i0] -> Stmt_S2[o0, 1 - i0] : i0 <= 1 and i0 >= 0 and o0 >= 1 + i0 and o0 <= 98; Stmt_S1[i0] -> Stmt_S3[2 + i0] : i0 <= 96 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S2[i0, i1] -> Stmt_S2[1 + i0, i1] : i0 <= 97 and i0 >= 0 and i1 <= 98 - i0 and i1 >= 0 and i1 >= 2 - i0; Stmt_S2[0, 0] -> Stmt_S2[1, 0] }
 | 
			
		||||
;
 | 
			
		||||
;    void f(int *sum) {
 | 
			
		||||
;      int i, j;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,19 +1,13 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK:     RAW dependences:
 | 
			
		||||
; CHECK-DAG:   Stmt_S2[i0, i1] -> Stmt_S1[i1] : i0 >= 0 and i1 >= 1 + i0 and i1 <= 98
 | 
			
		||||
; CHECK-DAG:   Stmt_S1[i0] -> Stmt_S2[i0, i0] : i0 <= 98 and i0 >= 0
 | 
			
		||||
; CHECK-DAG:   Stmt_S2[i0, i0] -> Stmt_S3[i0] : i0 <= 98 and i0 >= 0
 | 
			
		||||
; CHECK-DAG:   Stmt_S3[i0] -> Stmt_S2[o0, i0] : i0 >= 0 and o0 >= 1 + i0 and o0 <= 98
 | 
			
		||||
; CHECK:     WAR dependences:
 | 
			
		||||
; CHECK-DAG:    {  }
 | 
			
		||||
; CHECK:     WAW dependences:
 | 
			
		||||
; CHECK-DAG:   Stmt_S2[i0, i1] -> Stmt_S1[i1] : i0 >= 0 and i1 >= 1 + i0 and i1 <= 98
 | 
			
		||||
; CHECK-DAG:   Stmt_S1[i0] -> Stmt_S2[i0, i0] : i0 <= 98 and i0 >= 0
 | 
			
		||||
; CHECK-DAG:   Stmt_S2[i0, i0] -> Stmt_S3[i0] : i0 <= 98 and i0 >= 0
 | 
			
		||||
; CHECK-DAG:   Stmt_S3[i0] -> Stmt_S2[o0, i0] : i0 >= 0 and o0 >= 1 + i0 and o0 <= 98
 | 
			
		||||
; CHECK:     Reduction dependences:
 | 
			
		||||
; CHECK-DAG:    { Stmt_S2[i0, i1] -> Stmt_S2[1 + i0, i1] : (i0 >= 0 and i1 >= 2 + i0 and i1 <= 99) or (i0 <= 97 and i1 >= 0 and i1 <= -1 + i0) }
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S2[i0, i1] -> Stmt_S1[i1] : i0 >= 0 and i1 >= 1 + i0 and i1 <= 98; Stmt_S1[i0] -> Stmt_S2[i0, i0] : i0 <= 98 and i0 >= 0; Stmt_S2[i0, i0] -> Stmt_S3[i0] : i0 <= 98 and i0 >= 0; Stmt_S3[i0] -> Stmt_S2[o0, i0] : i0 >= 0 and o0 >= 1 + i0 and o0 <= 98 }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S2[i0, i1] -> Stmt_S1[i1] : i0 >= 0 and i1 >= 1 + i0 and i1 <= 98; Stmt_S1[i0] -> Stmt_S2[i0, i0] : i0 <= 98 and i0 >= 0; Stmt_S2[i0, i0] -> Stmt_S3[i0] : i0 <= 98 and i0 >= 0; Stmt_S3[i0] -> Stmt_S2[o0, i0] : i0 >= 0 and o0 >= 1 + i0 and o0 <= 98 }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S2[i0, i1] -> Stmt_S2[1 + i0, i1] : (i0 >= 0 and i1 >= 2 + i0 and i1 <= 99) or (i0 <= 97 and i1 >= 0 and i1 <= -1 + i0) }
 | 
			
		||||
;
 | 
			
		||||
;    void f(int *sum) {
 | 
			
		||||
;      for (int i = 0; i < 99; i++) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,13 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK:     RAW dependences:
 | 
			
		||||
; CHECK-DAG:   Stmt_S2[i0, 0] -> Stmt_S1[1 + i0, 0] : i0 <= 97 and i0 >= 0
 | 
			
		||||
; CHECK-DAG:   Stmt_S1[i0, 0] -> Stmt_S2[i0, 0] : i0 <= 98 and i0 >= 0
 | 
			
		||||
; CHECK:     WAR dependences:
 | 
			
		||||
; CHECK-DAG:   {  }
 | 
			
		||||
; CHECK:     WAW dependences:
 | 
			
		||||
; CHECK-DAG:   Stmt_S2[i0, 0] -> Stmt_S1[1 + i0, 0] : i0 <= 97 and i0 >= 0
 | 
			
		||||
; CHECK-DAG:   Stmt_S1[i0, 0] -> Stmt_S2[i0, 0] : i0 <= 98 and i0 >= 0
 | 
			
		||||
; CHECK:     Reduction dependences:
 | 
			
		||||
; CHECK-DAG:   { Stmt_S2[i0, i1] -> Stmt_S2[1 + i0, i1] : i0 <= 97 and i0 >= 0 and i1 <= 99 and i1 >= 1 }
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S2[i0, 0] -> Stmt_S1[1 + i0, 0] : i0 <= 97 and i0 >= 0; Stmt_S1[i0, 0] -> Stmt_S2[i0, 0] : i0 <= 98 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S2[i0, 0] -> Stmt_S1[1 + i0, 0] : i0 <= 97 and i0 >= 0; Stmt_S1[i0, 0] -> Stmt_S2[i0, 0] : i0 <= 98 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S2[i0, i1] -> Stmt_S2[1 + i0, i1] : i0 <= 97 and i0 >= 0 and i1 <= 99 and i1 >= 1 }
 | 
			
		||||
;
 | 
			
		||||
;    void f(int *sum) {
 | 
			
		||||
;      for (int i = 0; i < 99; i++) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1,13 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK:  RAW dependences:
 | 
			
		||||
; CHECK:    {  }
 | 
			
		||||
; CHECK:  WAR dependences:
 | 
			
		||||
; CHECK:    {  }
 | 
			
		||||
; CHECK:  WAW dependences:
 | 
			
		||||
; CHECK:    {  }
 | 
			
		||||
; CHECK:  Reduction dependences:
 | 
			
		||||
; CHECK:    { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; void f(int* sum) {
 | 
			
		||||
;   for (int i = 0; i <= 100; i++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,60 +2,67 @@
 | 
			
		|||
;
 | 
			
		||||
; REQUIRES: asserts
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Read: { [Stmt_for_cond[i0] -> MemRef_sum[0]] -> MemRef_sum[0] :
 | 
			
		||||
; CHECK-DAG:          i0 >= 0
 | 
			
		||||
; CHECK-DAG:       and
 | 
			
		||||
; CHECK-DAG:          i0 <= 100
 | 
			
		||||
; CHECK:       }
 | 
			
		||||
; CHECK: Write: { [Stmt_for_cond[i0] -> MemRef_sum[0]] -> MemRef_sum[0] :
 | 
			
		||||
; CHECK-DAG:          i0 >= 0
 | 
			
		||||
; CHECK-DAG:       and
 | 
			
		||||
; CHECK-DAG:          i0 <= 100
 | 
			
		||||
; CHECK:       }
 | 
			
		||||
; CHECK: Wrapped Dependences:
 | 
			
		||||
; CHECK: RAW dependences:
 | 
			
		||||
; CHECK:   { [Stmt_for_cond[i0] -> MemRef_sum[0]] -> [Stmt_for_cond[1 + i0] -> MemRef_sum[0]] : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
; CHECK: WAR dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAW dependences:
 | 
			
		||||
; CHECK:   { [Stmt_for_cond[i0] -> MemRef_sum[0]] -> [Stmt_for_cond[1 + i0] -> MemRef_sum[0]] : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK:   n/a
 | 
			
		||||
; CHECK: Final Wrapped Dependences:
 | 
			
		||||
; CHECK: RAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAR dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK:   { [Stmt_for_cond[i0] -> MemRef_sum[0]] -> [Stmt_for_cond[1 + i0] -> MemRef_sum[0]] : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
; CHECK: Zipped Dependences:
 | 
			
		||||
; CHECK: RAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAR dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK:   { [Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0]] -> [MemRef_sum[0] -> MemRef_sum[0]] : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
; CHECK: Unwrapped Dependences:
 | 
			
		||||
; CHECK: RAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAR dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK:   { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
; CHECK: RAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAR dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK:   { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
; CHECK:      Read: { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> MemRef_sum[0] : i0 <= 100 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT: Write: { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> MemRef_sum[0] : i0 <= 100 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT: MayWrite: {  }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Wrapped Dependences:
 | 
			
		||||
; CHECK-NEXT:     RAW dependences:
 | 
			
		||||
; CHECK-NEXT:         { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> [Stmt_for_cond[1 + i0] -> MemRef_sum[0{{\]\]}} : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT:     WAR dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     WAW dependences:
 | 
			
		||||
; CHECK-NEXT:         { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> [Stmt_for_cond[1 + i0] -> MemRef_sum[0{{\]\]}} : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT:     Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:         n/a
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Final Wrapped Dependences:
 | 
			
		||||
; CHECK-NEXT:     RAW dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     WAR dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     WAW dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:         { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> [Stmt_for_cond[1 + i0] -> MemRef_sum[0{{\]\]}} : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Zipped Dependences:
 | 
			
		||||
; CHECK-NEXT:     RAW dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     WAR dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     WAW dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:         { [Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0{{\]\]}} -> [MemRef_sum[0] -> MemRef_sum[0{{\]\]}} : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Unwrapped Dependences:
 | 
			
		||||
; CHECK-NEXT:     RAW dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     WAR dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     WAW dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:         { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:          RAW dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     WAR dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     WAW dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:         { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:          RAW dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     WAR dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     WAW dependences:
 | 
			
		||||
; CHECK-NEXT:         {  }
 | 
			
		||||
; CHECK-NEXT:     Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:         { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; void f(int* sum) {
 | 
			
		||||
;   for (int i = 0; i <= 100; i++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,17 +1,13 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-DAG:    Stmt_S1[i0, i1] -> Stmt_S2[i0] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0
 | 
			
		||||
; CHECK-DAG:    Stmt_S0[i0] -> Stmt_S1[i0, o1] : i0 <= 99 and i0 >= 0 and o1 <= 99 and o1 >= 0
 | 
			
		||||
; CHECK-DAG:    Stmt_S2[i0] -> Stmt_S0[1 + i0] : i0 <= 98 and i0 >= 0
 | 
			
		||||
; CHECK:      WAR dependences:
 | 
			
		||||
; CHECK-DAG:     {  }
 | 
			
		||||
; CHECK:      WAW dependences:
 | 
			
		||||
; CHECK-DAG:    Stmt_S1[i0, i1] -> Stmt_S2[i0] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0
 | 
			
		||||
; CHECK-DAG:    Stmt_S0[i0] -> Stmt_S1[i0, o1] : i0 <= 99 and i0 >= 0 and o1 <= 99 and o1 >= 0
 | 
			
		||||
; CHECK-DAG:    Stmt_S2[i0] -> Stmt_S0[1 + i0] : i0 <= 98 and i0 >= 0
 | 
			
		||||
; CHECK:      Reduction dependences:
 | 
			
		||||
; CHECK-DAG:    Stmt_S1[i0, i1] -> Stmt_S1[i0, 1 + i1] : i0 <= 99 and i0 >= 0 and i1 <= 98 and i1 >= 0
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S2[i0] -> Stmt_S0[1 + i0] : i0 <= 98 and i0 >= 0; Stmt_S0[i0] -> Stmt_S1[i0, o1] : i0 <= 99 and i0 >= 0 and o1 <= 99 and o1 >= 0; Stmt_S1[i0, i1] -> Stmt_S2[i0] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S2[i0] -> Stmt_S0[1 + i0] : i0 <= 98 and i0 >= 0; Stmt_S0[i0] -> Stmt_S1[i0, o1] : i0 <= 99 and i0 >= 0 and o1 <= 99 and o1 >= 0; Stmt_S1[i0, i1] -> Stmt_S2[i0] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_S1[i0, i1] -> Stmt_S1[i0, 1 + i1] : i0 <= 99 and i0 >= 0 and i1 <= 98 and i1 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
;    void f(int *sum) {
 | 
			
		||||
;      for (int i = 0; i < 100; i++) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,13 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-DAG:    Stmt_S0[] -> Stmt_S1[o0] : N >= 11 and o0 <= 1023 and o0 >= 0
 | 
			
		||||
; CHECK-DAG:    Stmt_S1[i0] -> Stmt_S2[] : N >= 11 and i0 <= 1023 and i0 >= 0
 | 
			
		||||
; CHECK:      WAR dependences:
 | 
			
		||||
; CHECK:       [N] -> {  }
 | 
			
		||||
; CHECK:      WAW dependences:
 | 
			
		||||
; CHECK-DAG:    Stmt_S0[] -> Stmt_S1[o0] : N >= 11 and o0 <= 1023 and o0 >= 0
 | 
			
		||||
; CHECK-DAG:    Stmt_S1[i0] -> Stmt_S2[] : N >= 11 and i0 <= 1023 and i0 >= 0
 | 
			
		||||
; CHECK:   Reduction dependences:
 | 
			
		||||
; CHECK:        Stmt_S1[i0] -> Stmt_S1[1 + i0] : N >= 11 and i0 <= 1022 and i0 >= 0
 | 
			
		||||
; CHECK-NEXT:     [N] -> { Stmt_S0[] -> Stmt_S1[o0] : N >= 11 and o0 <= 1023 and o0 >= 0; Stmt_S1[i0] -> Stmt_S2[] : N >= 11 and i0 <= 1023 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     [N] -> {  }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     [N] -> { Stmt_S0[] -> Stmt_S1[o0] : N >= 11 and o0 <= 1023 and o0 >= 0; Stmt_S1[i0] -> Stmt_S2[] : N >= 11 and i0 <= 1023 and i0 >= 0 }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     [N] -> { Stmt_S1[i0] -> Stmt_S1[1 + i0] : N >= 11 and i0 <= 1022 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
;    void f(int *sum, int N) {
 | 
			
		||||
;      if (N >= 10) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1,13 @@
 | 
			
		|||
; RUN: opt %loadPolly -basicaa -polly-dependences -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK: RAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAR dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: WAW dependences:
 | 
			
		||||
; CHECK:   {  }
 | 
			
		||||
; CHECK: Reduction dependences:
 | 
			
		||||
; CHECK-DAG: Stmt_for_body3[i0, i1] -> Stmt_for_body3[o0, 1 + i0 + i1 - o0] : o0 <= 1 + i0 and o0 >= i0 and o0 <= 1023 and i0 >= 0 and i1 >= 0 and o0 >= -1022 + i0 + i1
 | 
			
		||||
; CHECK:      RAW dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAR dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: WAW dependences:
 | 
			
		||||
; CHECK-NEXT:     {  }
 | 
			
		||||
; CHECK-NEXT: Reduction dependences:
 | 
			
		||||
; CHECK-NEXT:     { Stmt_for_body3[i0, i1] -> Stmt_for_body3[o0, 1 + i0 + i1 - o0] : o0 <= 1 + i0 and o0 >= i0 and o0 <= 1023 and i0 >= 0 and i1 >= 0 and o0 >= -1022 + i0 + i1 }
 | 
			
		||||
;
 | 
			
		||||
; void f(int *restrict A, int *restrict B, int *restrict Values) {
 | 
			
		||||
;   for (int i = 0; i < 1024; i++) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,70 @@
 | 
			
		|||
; RUN: opt -S %loadPolly -basicaa -polly-dependences -analyze -polly-dependences-analysis-type=value-based < %s | FileCheck %s -check-prefix=VALUE
 | 
			
		||||
; RUN: opt -S %loadPolly -basicaa -polly-dependences -analyze -polly-dependences-analysis-type=memory-based < %s | FileCheck %s -check-prefix=MEMORY
 | 
			
		||||
 | 
			
		||||
; VALUE-LABEL: Printing analysis 'Polly - Calculate dependences' for region: 'S1 => exit.3' in function 'sequential_writes':
 | 
			
		||||
; VALUE-NEXT:      RAW dependences:
 | 
			
		||||
; VALUE-NEXT:          {  }
 | 
			
		||||
; VALUE-NEXT:      WAR dependences:
 | 
			
		||||
; VALUE-NEXT:          {  }
 | 
			
		||||
; VALUE-NEXT:      WAW dependences:
 | 
			
		||||
; VALUE-NEXT:          { Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0; Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 10 }
 | 
			
		||||
;
 | 
			
		||||
; VALUE-LABEL: Printing analysis 'Polly - Calculate dependences' for region: 'S1 => exit.3' in function 'read_after_writes':
 | 
			
		||||
; VALUE-NEXT:      RAW dependences:
 | 
			
		||||
; VALUE-NEXT:          { Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 10 }
 | 
			
		||||
; VALUE-NEXT:      WAR dependences:
 | 
			
		||||
; VALUE-NEXT:          {  }
 | 
			
		||||
; VALUE-NEXT:      WAW dependences:
 | 
			
		||||
; VALUE-NEXT:          { Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; VALUE-LABEL: Printing analysis 'Polly - Calculate dependences' for region: 'S1 => exit.3' in function 'write_after_read':
 | 
			
		||||
; VALUE-NEXT:      RAW dependences:
 | 
			
		||||
; VALUE-NEXT:          {  }
 | 
			
		||||
; VALUE-NEXT:      WAR dependences:
 | 
			
		||||
; VALUE-NEXT:          { Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 10 }
 | 
			
		||||
; VALUE-NEXT:      WAW dependences:
 | 
			
		||||
; VALUE-NEXT:          { Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; VALUE-LABEL: Printing analysis 'Polly - Calculate dependences' for region: 'S1 => exit.2' in function 'parametric_offset':
 | 
			
		||||
; VALUE-NEXT:      RAW dependences:
 | 
			
		||||
; VALUE-NEXT:          [p] -> { Stmt_S1[i0] -> Stmt_S2[-p + i0] : i0 <= 9 + p and i0 >= p and i0 <= 99 and i0 >= 0 }
 | 
			
		||||
; VALUE-NEXT:      WAR dependences:
 | 
			
		||||
; VALUE-NEXT:          [p] -> {  }
 | 
			
		||||
; VALUE-NEXT:      WAW dependences:
 | 
			
		||||
; VALUE-NEXT:          [p] -> {  }
 | 
			
		||||
 | 
			
		||||
; MEMORY-LABEL: Printing analysis 'Polly - Calculate dependences' for region: 'S1 => exit.3' in function 'sequential_writes':
 | 
			
		||||
; MEMORY-NEXT:      RAW dependences:
 | 
			
		||||
; MEMORY-NEXT:          {  }
 | 
			
		||||
; MEMORY-NEXT:      WAR dependences:
 | 
			
		||||
; MEMORY-NEXT:          {  }
 | 
			
		||||
; MEMORY-NEXT:      WAW dependences:
 | 
			
		||||
; MEMORY-NEXT:          { Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0; Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; MEMORY-LABEL: Printing analysis 'Polly - Calculate dependences' for region: 'S1 => exit.3' in function 'read_after_writes':
 | 
			
		||||
; MEMORY-NEXT:      RAW dependences:
 | 
			
		||||
; MEMORY-NEXT:          { Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
; MEMORY-NEXT:      WAR dependences:
 | 
			
		||||
; MEMORY-NEXT:          {  }
 | 
			
		||||
; MEMORY-NEXT:      WAW dependences:
 | 
			
		||||
; MEMORY-NEXT:          { Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; MEMORY-LABEL: Printing analysis 'Polly - Calculate dependences' for region: 'S1 => exit.3' in function 'write_after_read':
 | 
			
		||||
; MEMORY-NEXT:      RAW dependences:
 | 
			
		||||
; MEMORY-NEXT:          {  }
 | 
			
		||||
; MEMORY-NEXT:      WAR dependences:
 | 
			
		||||
; MEMORY-NEXT:          { Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 0 }
 | 
			
		||||
; MEMORY-NEXT:      WAW dependences:
 | 
			
		||||
; MEMORY-NEXT:          { Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0 }
 | 
			
		||||
;
 | 
			
		||||
; MEMORY-LABEL: Printing analysis 'Polly - Calculate dependences' for region: 'S1 => exit.2' in function 'parametric_offset':
 | 
			
		||||
; MEMORY-NEXT:      RAW dependences:
 | 
			
		||||
; MEMORY-NEXT:          [p] -> { Stmt_S1[i0] -> Stmt_S2[-p + i0] : i0 >= p and i0 <= 99 and i0 >= 0 and i0 <= 9 + p }
 | 
			
		||||
; MEMORY-NEXT:      WAR dependences:
 | 
			
		||||
; MEMORY-NEXT:          [p] -> {  }
 | 
			
		||||
; MEMORY-NEXT:      WAW dependences:
 | 
			
		||||
; MEMORY-NEXT:          [p] -> {  }
 | 
			
		||||
 | 
			
		||||
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"
 | 
			
		||||
 | 
			
		||||
;     for(i = 0; i < 100; i++ )
 | 
			
		||||
| 
						 | 
				
			
			@ -50,29 +115,6 @@ exit.3:
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; VALUE-LABEL: region: 'S1 => exit.3' in function 'sequential_writes':
 | 
			
		||||
; VALUE:   RAW dependences:
 | 
			
		||||
; VALUE:     {  }
 | 
			
		||||
; VALUE:   WAR dependences:
 | 
			
		||||
; VALUE:     {  }
 | 
			
		||||
; VALUE:   WAW dependences:
 | 
			
		||||
; VALUE:     {
 | 
			
		||||
; VALUE:       Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0;
 | 
			
		||||
; VALUE:       Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0;
 | 
			
		||||
; VALUE:       Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 10
 | 
			
		||||
; VALUE:     }
 | 
			
		||||
 | 
			
		||||
; MEMORY-LABEL: region: 'S1 => exit.3' in function 'sequential_writes':
 | 
			
		||||
; MEMORY:   RAW dependences:
 | 
			
		||||
; MEMORY:     {  }
 | 
			
		||||
; MEMORY:   WAR dependences:
 | 
			
		||||
; MEMORY:     {  }
 | 
			
		||||
; MEMORY:   WAW dependences:
 | 
			
		||||
; MEMORY:     {
 | 
			
		||||
; MEMORY:       Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0;
 | 
			
		||||
; MEMORY:       Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0;
 | 
			
		||||
; MEMORY:       Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 0
 | 
			
		||||
; MEMORY:     }
 | 
			
		||||
 | 
			
		||||
;     for(i = 0; i < 100; i++ )
 | 
			
		||||
; S1:   A[i] = 2;
 | 
			
		||||
| 
						 | 
				
			
			@ -125,31 +167,6 @@ exit.3:
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; VALUE-LABEL: region: 'S1 => exit.3' in function 'read_after_writes':
 | 
			
		||||
; VALUE:   RAW dependences:
 | 
			
		||||
; VALUE:     {
 | 
			
		||||
; VALUE:       Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0;
 | 
			
		||||
; VALUE:       Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 10
 | 
			
		||||
; VALUE:     }
 | 
			
		||||
; VALUE:   WAR dependences:
 | 
			
		||||
; VALUE:     {  }
 | 
			
		||||
; VALUE:   WAW dependences:
 | 
			
		||||
; VALUE:     {
 | 
			
		||||
; VALUE:       Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0
 | 
			
		||||
; VALUE:     }
 | 
			
		||||
 | 
			
		||||
; MEMORY-LABEL: region: 'S1 => exit.3' in function 'read_after_writes':
 | 
			
		||||
; MEMORY:   RAW dependences:
 | 
			
		||||
; MEMORY:     {
 | 
			
		||||
; MEMORY:       Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0;
 | 
			
		||||
; MEMORY:       Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 0
 | 
			
		||||
; MEMORY:     }
 | 
			
		||||
; MEMORY:   WAR dependences:
 | 
			
		||||
; MEMORY:     {  }
 | 
			
		||||
; MEMORY:   WAW dependences:
 | 
			
		||||
; MEMORY:     {
 | 
			
		||||
; MEMORY:       Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0
 | 
			
		||||
; MEMORY:     }
 | 
			
		||||
 | 
			
		||||
;     for(i = 0; i < 100; i++ )
 | 
			
		||||
; S1:   B[i] = A[i];
 | 
			
		||||
| 
						 | 
				
			
			@ -202,33 +219,6 @@ exit.3:
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; VALUE-LABEL: region: 'S1 => exit.3' in function 'write_after_read':
 | 
			
		||||
; VALUE:   RAW dependences:
 | 
			
		||||
; VALUE:     {
 | 
			
		||||
; VALUE:     }
 | 
			
		||||
; VALUE:   WAR dependences:
 | 
			
		||||
; VALUE:     {
 | 
			
		||||
; VALUE:       Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0;
 | 
			
		||||
; VALUE:       Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 10
 | 
			
		||||
; VALUE:     }
 | 
			
		||||
; VALUE:   WAW dependences:
 | 
			
		||||
; VALUE:     {
 | 
			
		||||
; VALUE:       Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0
 | 
			
		||||
; VALUE:     }
 | 
			
		||||
 | 
			
		||||
; MEMORY-LABEL: region: 'S1 => exit.3' in function 'write_after_read':
 | 
			
		||||
; MEMORY:   RAW dependences:
 | 
			
		||||
; MEMORY:     {
 | 
			
		||||
; MEMORY:     }
 | 
			
		||||
; MEMORY:   WAR dependences:
 | 
			
		||||
; MEMORY:     {
 | 
			
		||||
; MEMORY:        Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0;
 | 
			
		||||
; MEMORY:        Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 0
 | 
			
		||||
; MEMORY:     }
 | 
			
		||||
; MEMORY:   WAW dependences:
 | 
			
		||||
; MEMORY:     {
 | 
			
		||||
; MEMORY:        Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0
 | 
			
		||||
; MEMORY:     }
 | 
			
		||||
 | 
			
		||||
;     for(i = 0; i < 100; i++ )
 | 
			
		||||
; S1:   A[i] = 10
 | 
			
		||||
| 
						 | 
				
			
			@ -268,31 +258,3 @@ exit.2:
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; VALUE: region: 'S1 => exit.2' in function 'parametric_offset':
 | 
			
		||||
; VALUE:   RAW dependences:
 | 
			
		||||
; VALUE:     [p] -> {
 | 
			
		||||
; VALUE:       Stmt_S1[i0] -> Stmt_S2[-p + i0] :
 | 
			
		||||
; VALUE-DAG:           i0 >= p
 | 
			
		||||
; VALUE-DAG:           i0 <= 9 + p
 | 
			
		||||
; VALUE-DAG:           i0 <= 99
 | 
			
		||||
; VALUE-DAG:           i0 >= 0
 | 
			
		||||
; VALUE:     }
 | 
			
		||||
; VALUE:   WAR dependences:
 | 
			
		||||
; VALUE:     [p] -> {
 | 
			
		||||
; VALUE:     }
 | 
			
		||||
; VALUE:   WAW dependences:
 | 
			
		||||
; VALUE:     [p] -> {
 | 
			
		||||
; VALUE:     }
 | 
			
		||||
 | 
			
		||||
; MEMORY: region: 'S1 => exit.2' in function 'parametric_offset':
 | 
			
		||||
; MEMORY:   RAW dependences:
 | 
			
		||||
; MEMORY:     [p] -> {
 | 
			
		||||
; MEMORY:       Stmt_S1[i0] -> Stmt_S2[-p + i0] :
 | 
			
		||||
; MEMORY:           i0 >= p and i0 <= 99 and i0 >= 0 and i0 <= 9 + p
 | 
			
		||||
; MEMORY:     }
 | 
			
		||||
; MEMORY:   WAR dependences:
 | 
			
		||||
; MEMORY:     [p] -> {
 | 
			
		||||
; MEMORY:     }
 | 
			
		||||
; MEMORY:   WAW dependences:
 | 
			
		||||
; MEMORY:     [p] -> {
 | 
			
		||||
; MEMORY:     }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,23 +1,23 @@
 | 
			
		|||
; RUN: opt -S %loadPolly -polly-vectorizer=stripmine -polly-opt-isl -polly-ast -analyze < %s | FileCheck %s
 | 
			
		||||
; CHECK:       // 1st level tiling - Tiles
 | 
			
		||||
; CHECK:       #pragma known-parallel
 | 
			
		||||
; CHECK:       for (int c0 = 0; c0 <= floord(ni - 1, 32); c0 += 1)
 | 
			
		||||
; CHECK:         for (int c1 = 0; c1 <= floord(nj - 1, 32); c1 += 1)
 | 
			
		||||
; CHECK:           for (int c2 = 0; c2 <= floord(nk - 1, 32); c2 += 1) {
 | 
			
		||||
; CHECK:             // 1st level tiling - Points
 | 
			
		||||
; CHECK:             for (int c3 = 0; c3 <= min(31, ni - 32 * c0 - 1); c3 += 1) {
 | 
			
		||||
; CHECK:               for (int c4 = 0; c4 <= min(7, -8 * c1 + nj / 4 - 1); c4 += 1)
 | 
			
		||||
; CHECK:                 for (int c5 = 0; c5 <= min(31, nk - 32 * c2 - 1); c5 += 1)
 | 
			
		||||
; CHECK:                   #pragma simd
 | 
			
		||||
; CHECK:                   for (int c6 = 0; c6 <= 3; c6 += 1)
 | 
			
		||||
; CHECK:                     Stmt_for_body_6(32 * c0 + c3, 32 * c1 + 4 * c4 + c6, 32 * c2 + c5);
 | 
			
		||||
; CHECK:               if (32 * c1 + 31 >= nj)
 | 
			
		||||
; CHECK:                 for (int c5 = 0; c5 <= min(31, nk - 32 * c2 - 1); c5 += 1)
 | 
			
		||||
; CHECK:                   #pragma simd
 | 
			
		||||
; CHECK:                   for (int c6 = 0; c6 < nj % 4; c6 += 1)
 | 
			
		||||
; CHECK:                     Stmt_for_body_6(32 * c0 + c3, -((nj - 1) % 4) + nj + c6 - 1, 32 * c2 + c5);
 | 
			
		||||
; CHECK:             }
 | 
			
		||||
; CHECK:           }
 | 
			
		||||
; CHECK:          // 1st level tiling - Tiles
 | 
			
		||||
; CHECK-NEXT:     #pragma known-parallel
 | 
			
		||||
; CHECK-NEXT:     for (int c0 = 0; c0 <= floord(ni - 1, 32); c0 += 1)
 | 
			
		||||
; CHECK-NEXT:       for (int c1 = 0; c1 <= floord(nj - 1, 32); c1 += 1)
 | 
			
		||||
; CHECK-NEXT:         for (int c2 = 0; c2 <= floord(nk - 1, 32); c2 += 1) {
 | 
			
		||||
; CHECK-NEXT:           // 1st level tiling - Points
 | 
			
		||||
; CHECK-NEXT:           for (int c3 = 0; c3 <= min(31, ni - 32 * c0 - 1); c3 += 1) {
 | 
			
		||||
; CHECK-NEXT:             for (int c4 = 0; c4 <= min(7, -8 * c1 + nj / 4 - 1); c4 += 1)
 | 
			
		||||
; CHECK-NEXT:               for (int c5 = 0; c5 <= min(31, nk - 32 * c2 - 1); c5 += 1)
 | 
			
		||||
; CHECK-NEXT:                 #pragma simd
 | 
			
		||||
; CHECK-NEXT:                 for (int c6 = 0; c6 <= 3; c6 += 1)
 | 
			
		||||
; CHECK-NEXT:                   Stmt_for_body_6(32 * c0 + c3, 32 * c1 + 4 * c4 + c6, 32 * c2 + c5);
 | 
			
		||||
; CHECK-NEXT:             if (32 * c1 + 31 >= nj)
 | 
			
		||||
; CHECK-NEXT:               for (int c5 = 0; c5 <= min(31, nk - 32 * c2 - 1); c5 += 1)
 | 
			
		||||
; CHECK-NEXT:                 #pragma simd
 | 
			
		||||
; CHECK-NEXT:                 for (int c6 = 0; c6 < nj % 4; c6 += 1)
 | 
			
		||||
; CHECK-NEXT:                   Stmt_for_body_6(32 * c0 + c3, -((nj - 1) % 4) + nj + c6 - 1, 32 * c2 + c5);
 | 
			
		||||
; CHECK-NEXT:           }
 | 
			
		||||
; CHECK-NEXT:         }
 | 
			
		||||
 | 
			
		||||
; Function Attrs: nounwind uwtable
 | 
			
		||||
define void @kernel_gemm(i32 %ni, i32 %nj, i32 %nk, double %alpha, double %beta, [1024 x double]* %C, [1024 x double]* %A, [1024 x double]* %B) #0 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,15 +50,22 @@ for.end7:                                         ; preds = %for.cond
 | 
			
		|||
  ret i32 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; CHECK: Context:
 | 
			
		||||
; CHECK: p0: {0,+,1}<%for.cond>
 | 
			
		||||
 | 
			
		||||
; CHECK: Domain :=
 | 
			
		||||
; CHECK: [p_0] -> { Stmt_if_then[i0] :
 | 
			
		||||
; CHECK-DAG:         i0 >= 0
 | 
			
		||||
; CHECK-DAG:       and
 | 
			
		||||
; CHECK-DAG:         i0 <= 1022
 | 
			
		||||
; CHECK-DAG:       and
 | 
			
		||||
; CHECK-DAG:         i0 >= 999 - p_0
 | 
			
		||||
; CHECK:          }
 | 
			
		||||
; CHECK:      p0: {0,+,1}<%for.cond>
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_if_then
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [p_0] -> { Stmt_if_then[i0] : i0 <= 1022 and i0 >= 0 and i0 >= 999 - p_0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [p_0] -> { Stmt_if_then[i0] -> [0, i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [p_0] -> { Stmt_if_then[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_inc5
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [p_0] -> { Stmt_for_inc5[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [p_0] -> { Stmt_for_inc5[] -> [1, 0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [p_0] -> { Stmt_for_inc5[] -> MemRef_indvar_out_next[] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,12 +8,26 @@
 | 
			
		|||
;      }
 | 
			
		||||
;    }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Stmt_for_body
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                { Stmt_for_body[i0] : i0 <= 15 and i0 >= 0 };
 | 
			
		||||
; CHECK:      Stmt_if_then
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                { Stmt_if_then[i0] : i0 <= 7 and i0 >= 6 };
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body[i0] : i0 <= 15 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_if_then
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_if_then[i0] : i0 <= 7 and i0 >= 6 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_if_then[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_if_then[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_if_then[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,32 +7,40 @@
 | 
			
		|||
; RUN:     -polly-allow-nonaffine-branches -polly-allow-nonaffine-loops=true \
 | 
			
		||||
; RUN:     -analyze < %s | FileCheck %s -check-prefix=PROFIT
 | 
			
		||||
;
 | 
			
		||||
; SCALAR:    Function: f
 | 
			
		||||
; SCALAR:    Region: %bb1---%bb13
 | 
			
		||||
; SCALAR:    Max Loop Depth:  1
 | 
			
		||||
; SCALAR:    Context:
 | 
			
		||||
; SCALAR:    {  :  }
 | 
			
		||||
; SCALAR:    Assumed Context:
 | 
			
		||||
; SCALAR:    {  :  }
 | 
			
		||||
; SCALAR:    Alias Groups (0):
 | 
			
		||||
; SCALAR:        n/a
 | 
			
		||||
; SCALAR:    Statements {
 | 
			
		||||
; SCALAR:      Stmt_bb3__TO__bb11
 | 
			
		||||
; SCALAR:            Domain :=
 | 
			
		||||
; SCALAR:                { Stmt_bb3__TO__bb11[i0] :
 | 
			
		||||
; SCALAR-DAG:               i0 >= 0
 | 
			
		||||
; SCALAR-DAG:             and
 | 
			
		||||
; SCALAR-DAG:               i0 <= 1023
 | 
			
		||||
; SCALAR:                }
 | 
			
		||||
; SCALAR:            Schedule :=
 | 
			
		||||
; SCALAR:                { Stmt_bb3__TO__bb11[i0] -> [i0] };
 | 
			
		||||
; SCALAR:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; SCALAR:                { Stmt_bb3__TO__bb11[i0] -> MemRef_C[i0] };
 | 
			
		||||
; SCALAR:            ReadAccess := [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; SCALAR:                { Stmt_bb3__TO__bb11[i0] -> MemRef_A[o0] : o0 <= 2147483645 and o0 >= -2147483648 };
 | 
			
		||||
; SCALAR:            MayWriteAccess := [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; SCALAR:                { Stmt_bb3__TO__bb11[i0] -> MemRef_A[o0] : o0 <= 2147483645 and o0 >= -2147483648 };
 | 
			
		||||
; SCALAR:    }
 | 
			
		||||
; SCALAR:      Function: f
 | 
			
		||||
; SCALAR-NEXT: Region: %bb1---%bb13
 | 
			
		||||
; SCALAR-NEXT: Max Loop Depth:  1
 | 
			
		||||
; SCALAR-NEXT: Invariant Accesses: {
 | 
			
		||||
; SCALAR-NEXT: }
 | 
			
		||||
; SCALAR-NEXT: Context:
 | 
			
		||||
; SCALAR-NEXT: {  :  }
 | 
			
		||||
; SCALAR-NEXT: Assumed Context:
 | 
			
		||||
; SCALAR-NEXT: {  :  }
 | 
			
		||||
; SCALAR-NEXT: Boundary Context:
 | 
			
		||||
; SCALAR-NEXT: {  :  }
 | 
			
		||||
; SCALAR-NEXT: Arrays {
 | 
			
		||||
; SCALAR-NEXT:     i32 MemRef_C[*]; // Element size 4
 | 
			
		||||
; SCALAR-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; SCALAR-NEXT: }
 | 
			
		||||
; SCALAR-NEXT: Arrays (Bounds as pw_affs) {
 | 
			
		||||
; SCALAR-NEXT:     i32 MemRef_C[*]; // Element size 4
 | 
			
		||||
; SCALAR-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; SCALAR-NEXT: }
 | 
			
		||||
; SCALAR-NEXT: Alias Groups (0):
 | 
			
		||||
; SCALAR-NEXT:     n/a
 | 
			
		||||
; SCALAR-NEXT: Statements {
 | 
			
		||||
; SCALAR-NEXT:     Stmt_bb3__TO__bb11
 | 
			
		||||
; SCALAR-NEXT:         Domain :=
 | 
			
		||||
; SCALAR-NEXT:             { Stmt_bb3__TO__bb11[i0] : i0 <= 1023 and i0 >= 0 };
 | 
			
		||||
; SCALAR-NEXT:         Schedule :=
 | 
			
		||||
; SCALAR-NEXT:             { Stmt_bb3__TO__bb11[i0] -> [i0] };
 | 
			
		||||
; SCALAR-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; SCALAR-NEXT:             { Stmt_bb3__TO__bb11[i0] -> MemRef_C[i0] };
 | 
			
		||||
; SCALAR-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; SCALAR-NEXT:             { Stmt_bb3__TO__bb11[i0] -> MemRef_A[o0] : o0 <= 2147483645 and o0 >= -2147483648 };
 | 
			
		||||
; SCALAR-NEXT:         MayWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; SCALAR-NEXT:             { Stmt_bb3__TO__bb11[i0] -> MemRef_A[o0] : o0 <= 2147483645 and o0 >= -2147483648 };
 | 
			
		||||
; SCALAR-NEXT: }
 | 
			
		||||
 | 
			
		||||
; PROFIT-NOT: Statements
 | 
			
		||||
;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,72 +15,92 @@
 | 
			
		|||
; innermost loop in the whole loop nest and model A[k] as a non-affine
 | 
			
		||||
; access.
 | 
			
		||||
;
 | 
			
		||||
; INNERMOST:    Function: f
 | 
			
		||||
; INNERMOST:    Region: %bb15---%bb13
 | 
			
		||||
; INNERMOST:    Max Loop Depth:  1
 | 
			
		||||
; INNERMOST:    p0: {0,+,{0,+,1}<nuw><nsw><%bb11>}<nuw><nsw><%bb13>
 | 
			
		||||
; INNERMOST:    p1: {0,+,4}<nuw><nsw><%bb11>
 | 
			
		||||
; INNERMOST:    p2: {0,+,4}<nuw><nsw><%bb13>
 | 
			
		||||
; INNERMOST:    p3: {0,+,{0,+,4}<nuw><nsw><%bb11>}<%bb13>
 | 
			
		||||
; INNERMOST:    Alias Groups (0):
 | 
			
		||||
; INNERMOST:        n/a
 | 
			
		||||
; INNERMOST:    Statements {
 | 
			
		||||
; INNERMOST:      Stmt_bb16
 | 
			
		||||
; INNERMOST:            Domain :=
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] : i0 <= 1023 - p_0 and i0 >= 0 }
 | 
			
		||||
; INNERMOST:            Schedule :=
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] -> [0, i0] }
 | 
			
		||||
; INNERMOST:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] -> MemRef_A[o0] : 4o0 = p_1 };
 | 
			
		||||
; INNERMOST:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] -> MemRef_A[o0] : 4o0 = p_2 };
 | 
			
		||||
; INNERMOST:            ReadAccess := [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] -> MemRef_A[o0] : 4o0 = p_3 + 4i0 };
 | 
			
		||||
; INNERMOST:            MustWriteAccess :=  [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] -> MemRef_A[o0] : 4o0 = p_3 + 4i0 };
 | 
			
		||||
; INNERMOST:      Stmt_bb26
 | 
			
		||||
; INNERMOST:            Domain :=
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2, p_3] -> { Stmt_bb26[] : p_0 <= 1024 };
 | 
			
		||||
; INNERMOST:            Schedule :=
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2, p_3] -> { Stmt_bb26[] -> [1, 0] };
 | 
			
		||||
; INNERMOST:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2, p_3] -> { Stmt_bb26[] -> MemRef_indvars_iv_next6[] };
 | 
			
		||||
; INNERMOST:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2, p_3] -> { Stmt_bb26[] -> MemRef_indvars_iv_next4[] };
 | 
			
		||||
; INNERMOST:    }
 | 
			
		||||
;
 | 
			
		||||
; ALL:    Function: f
 | 
			
		||||
; ALL:    Region: %bb11---%bb29
 | 
			
		||||
; ALL:    Max Loop Depth:  2
 | 
			
		||||
; ALL:    Context:
 | 
			
		||||
; ALL:    {  :  }
 | 
			
		||||
; ALL:    Assumed Context:
 | 
			
		||||
; ALL:    {  :  }
 | 
			
		||||
; ALL:    Alias Groups (0):
 | 
			
		||||
; ALL:        n/a
 | 
			
		||||
; ALL:    Statements {
 | 
			
		||||
; ALL:      Stmt_bb15__TO__bb25
 | 
			
		||||
; ALL:            Domain :=
 | 
			
		||||
; ALL:                { Stmt_bb15__TO__bb25[i0, i1] :
 | 
			
		||||
; ALL-DAG:               i0 >= 0
 | 
			
		||||
; ALL-DAG:             and
 | 
			
		||||
; ALL-DAG:               i0 <= 1023
 | 
			
		||||
; ALL-DAG:             and
 | 
			
		||||
; ALL-DAG:               i1 >= 0
 | 
			
		||||
; ALL-DAG:             and
 | 
			
		||||
; ALL-DAG:               i1 <= 1023
 | 
			
		||||
; ALL:                }
 | 
			
		||||
; ALL:            Schedule :=
 | 
			
		||||
; ALL:                { Stmt_bb15__TO__bb25[i0, i1] -> [i0, i1] };
 | 
			
		||||
; ALL:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL:                { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[i0] };
 | 
			
		||||
; ALL:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL:                { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
; ALL:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL:                { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : o0 <= 2305843009213693949 and o0 >= 0 };
 | 
			
		||||
; ALL:            MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL:                { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : o0 <= 2305843009213693949 and o0 >= 0 };
 | 
			
		||||
; ALL:    }
 | 
			
		||||
; INNERMOST:      Function: f
 | 
			
		||||
; INNERMOST-NEXT: Region: %bb15---%bb13
 | 
			
		||||
; INNERMOST-NEXT: Max Loop Depth:  1
 | 
			
		||||
; INNERMOST-NEXT: Invariant Accesses: {
 | 
			
		||||
; INNERMOST-NEXT: }
 | 
			
		||||
; INNERMOST-NEXT: Context:
 | 
			
		||||
; INNERMOST-NEXT: [p_0, p_1, p_2, p_3] -> {  : p_0 >= 0 and p_0 <= 1048576 and p_1 >= 0 and p_1 <= 4096 and p_2 >= 0 and p_2 <= 4096 and p_3 >= 0 and p_3 <= 4194304 }
 | 
			
		||||
; INNERMOST-NEXT: Assumed Context:
 | 
			
		||||
; INNERMOST-NEXT: [p_0, p_1, p_2, p_3] -> {  :  }
 | 
			
		||||
; INNERMOST-NEXT: Boundary Context:
 | 
			
		||||
; INNERMOST-NEXT: [p_0, p_1, p_2, p_3] -> {  :  }
 | 
			
		||||
; INNERMOST-NEXT: p0: {0,+,{0,+,1}<nuw><nsw><%bb11>}<nuw><nsw><%bb13>
 | 
			
		||||
; INNERMOST-NEXT: p1: {0,+,4}<nuw><nsw><%bb11>
 | 
			
		||||
; INNERMOST-NEXT: p2: {0,+,4}<nuw><nsw><%bb13>
 | 
			
		||||
; INNERMOST-NEXT: p3: {0,+,{0,+,4}<nuw><nsw><%bb11>}<%bb13>
 | 
			
		||||
; INNERMOST-NEXT: Arrays {
 | 
			
		||||
; INNERMOST-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; INNERMOST-NEXT:     i64 MemRef_indvars_iv_next6; // Element size 8
 | 
			
		||||
; INNERMOST-NEXT:     i64 MemRef_indvars_iv_next4; // Element size 8
 | 
			
		||||
; INNERMOST-NEXT: }
 | 
			
		||||
; INNERMOST-NEXT: Arrays (Bounds as pw_affs) {
 | 
			
		||||
; INNERMOST-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; INNERMOST-NEXT:     i64 MemRef_indvars_iv_next6; // Element size 8
 | 
			
		||||
; INNERMOST-NEXT:     i64 MemRef_indvars_iv_next4; // Element size 8
 | 
			
		||||
; INNERMOST-NEXT: }
 | 
			
		||||
; INNERMOST-NEXT: Alias Groups (0):
 | 
			
		||||
; INNERMOST-NEXT:     n/a
 | 
			
		||||
; INNERMOST-NEXT: Statements {
 | 
			
		||||
; INNERMOST-NEXT:     Stmt_bb16
 | 
			
		||||
; INNERMOST-NEXT:         Domain :=
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] : i0 <= 1023 - p_0 and i0 >= 0 };
 | 
			
		||||
; INNERMOST-NEXT:         Schedule :=
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] -> [0, i0] };
 | 
			
		||||
; INNERMOST-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] -> MemRef_A[o0] : 4o0 = p_1 };
 | 
			
		||||
; INNERMOST-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] -> MemRef_A[o0] : 4o0 = p_2 };
 | 
			
		||||
; INNERMOST-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] -> MemRef_A[o0] : 4o0 = p_3 + 4i0 };
 | 
			
		||||
; INNERMOST-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] -> MemRef_A[o0] : 4o0 = p_3 + 4i0 };
 | 
			
		||||
; INNERMOST-NEXT:     Stmt_bb26
 | 
			
		||||
; INNERMOST-NEXT:         Domain :=
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2, p_3] -> { Stmt_bb26[] : p_0 <= 1024 };
 | 
			
		||||
; INNERMOST-NEXT:         Schedule :=
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2, p_3] -> { Stmt_bb26[] -> [1, 0] };
 | 
			
		||||
; INNERMOST-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2, p_3] -> { Stmt_bb26[] -> MemRef_indvars_iv_next6[] };
 | 
			
		||||
; INNERMOST-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2, p_3] -> { Stmt_bb26[] -> MemRef_indvars_iv_next4[] };
 | 
			
		||||
; INNERMOST-NEXT: }
 | 
			
		||||
 | 
			
		||||
; ALL:      Function: f
 | 
			
		||||
; ALL-NEXT: Region: %bb11---%bb29
 | 
			
		||||
; ALL-NEXT: Max Loop Depth:  2
 | 
			
		||||
; ALL-NEXT: Invariant Accesses: {
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
; ALL-NEXT: Context:
 | 
			
		||||
; ALL-NEXT: {  :  }
 | 
			
		||||
; ALL-NEXT: Assumed Context:
 | 
			
		||||
; ALL-NEXT: {  :  }
 | 
			
		||||
; ALL-NEXT: Boundary Context:
 | 
			
		||||
; ALL-NEXT: {  :  }
 | 
			
		||||
; ALL-NEXT: Arrays {
 | 
			
		||||
; ALL-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
; ALL-NEXT: Arrays (Bounds as pw_affs) {
 | 
			
		||||
; ALL-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
; ALL-NEXT: Alias Groups (0):
 | 
			
		||||
; ALL-NEXT:     n/a
 | 
			
		||||
; ALL-NEXT: Statements {
 | 
			
		||||
; ALL-NEXT:     Stmt_bb15__TO__bb25
 | 
			
		||||
; ALL-NEXT:         Domain :=
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb15__TO__bb25[i0, i1] : i0 <= 1023 and i0 >= 0 and i1 <= 1023 and i1 >= 0 };
 | 
			
		||||
; ALL-NEXT:         Schedule :=
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb15__TO__bb25[i0, i1] -> [i0, i1] };
 | 
			
		||||
; ALL-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[i0] };
 | 
			
		||||
; ALL-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
; ALL-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : o0 <= 2305843009213693949 and o0 >= 0 };
 | 
			
		||||
; ALL-NEXT:         MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : o0 <= 2305843009213693949 and o0 >= 0 };
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
;    void f(int *A) {
 | 
			
		||||
;      for (int i = 0; i < 1024; i++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,91 +14,91 @@
 | 
			
		|||
; innermost loop in the whole loop nest and model A[k] as a non-affine
 | 
			
		||||
; access.
 | 
			
		||||
;
 | 
			
		||||
; INNERMOST:    Function: f
 | 
			
		||||
; INNERMOST:    Region: %bb15---%bb13
 | 
			
		||||
; INNERMOST:    Max Loop Depth:  1
 | 
			
		||||
; INNERMOST:    Context:
 | 
			
		||||
; INNERMOST:      [p_0, p_1, p_2] -> {  :
 | 
			
		||||
; INNERMOST-DAG:    p_0 >= 0
 | 
			
		||||
; INNERMOST-DAG:      and
 | 
			
		||||
; INNERMOST-DAG:    p_0 <= 2147483647
 | 
			
		||||
; INNERMOST-DAG:      and
 | 
			
		||||
; INNERMOST-DAG:    p_1 >= 0
 | 
			
		||||
; INNERMOST-DAG:      and
 | 
			
		||||
; INNERMOST-DAG:     p_1 <= 4096
 | 
			
		||||
; INNERMOST-DAG:      and
 | 
			
		||||
; INNERMOST-DAG:    p_2 >= 0
 | 
			
		||||
; INNERMOST-DAG:      and
 | 
			
		||||
; INNERMOST-DAG:     p_2 <= 4096
 | 
			
		||||
; INNERMOST:                         }
 | 
			
		||||
; INNERMOST:    Assumed Context:
 | 
			
		||||
; INNERMOST:      [p_0, p_1, p_2] -> {  :  }
 | 
			
		||||
; INNERMOST:    p0: {0,+,{0,+,1}<nuw><nsw><%bb11>}<nuw><nsw><%bb13>
 | 
			
		||||
; INNERMOST:    p1: {0,+,4}<nuw><nsw><%bb11>
 | 
			
		||||
; INNERMOST:    p2: {0,+,4}<nuw><nsw><%bb13>
 | 
			
		||||
; INNERMOST:    Alias Groups (0):
 | 
			
		||||
; INNERMOST:        n/a
 | 
			
		||||
; INNERMOST:    Statements {
 | 
			
		||||
; INNERMOST:      Stmt_bb16
 | 
			
		||||
; INNERMOST:            Domain :=
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2] -> { Stmt_bb16[i0] :
 | 
			
		||||
; INNERMOST-DAG:               i0 >= 0
 | 
			
		||||
; INNERMOST-DAG:             and
 | 
			
		||||
; INNERMOST-DAG:               i0 <= -1 + p_0
 | 
			
		||||
; INNERMOST-DAG:             };
 | 
			
		||||
; INNERMOST:            Schedule :=
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> [0, i0] };
 | 
			
		||||
; INNERMOST:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[o0] : 4o0 = p_1 };
 | 
			
		||||
; INNERMOST:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[o0] : 4o0 = p_2 };
 | 
			
		||||
; INNERMOST:            ReadAccess := [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[i0] };
 | 
			
		||||
; INNERMOST:            MustWriteAccess :=  [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[i0] };
 | 
			
		||||
; INNERMOST:      Stmt_bb26
 | 
			
		||||
; INNERMOST:            Domain :=
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2] -> { Stmt_bb26[] :  p_0 >= 0 };
 | 
			
		||||
; INNERMOST:            Schedule :=
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2] -> { Stmt_bb26[] -> [1, 0] };
 | 
			
		||||
; INNERMOST:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2] -> { Stmt_bb26[] -> MemRef_indvars_iv_next6[] };
 | 
			
		||||
; INNERMOST:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; INNERMOST:                [p_0, p_1, p_2] -> { Stmt_bb26[] -> MemRef_indvars_iv_next4[] };
 | 
			
		||||
; INNERMOST:    }
 | 
			
		||||
;
 | 
			
		||||
; ALL:    Function: f
 | 
			
		||||
; ALL:    Region: %bb11---%bb29
 | 
			
		||||
; ALL:    Max Loop Depth:  2
 | 
			
		||||
; ALL:    Context:
 | 
			
		||||
; ALL:    {  :  }
 | 
			
		||||
; ALL:    Assumed Context:
 | 
			
		||||
; ALL:    {  :  }
 | 
			
		||||
; ALL:    Alias Groups (0):
 | 
			
		||||
; ALL:        n/a
 | 
			
		||||
; ALL:    Statements {
 | 
			
		||||
; ALL:      Stmt_bb15__TO__bb25
 | 
			
		||||
; ALL:            Domain :=
 | 
			
		||||
; ALL:                { Stmt_bb15__TO__bb25[i0, i1] :
 | 
			
		||||
; ALL-DAG:               i0 >= 0
 | 
			
		||||
; ALL-DAG:             and
 | 
			
		||||
; ALL-DAG:               i0 <= 1023
 | 
			
		||||
; ALL-DAG:             and
 | 
			
		||||
; ALL-DAG:               i1 >= 0
 | 
			
		||||
; ALL-DAG:             and
 | 
			
		||||
; ALL-DAG:               i1 <= 1023
 | 
			
		||||
; ALL:                }
 | 
			
		||||
; ALL:            Schedule :=
 | 
			
		||||
; ALL:                { Stmt_bb15__TO__bb25[i0, i1] -> [i0, i1] };
 | 
			
		||||
; ALL:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL:                { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[i0] };
 | 
			
		||||
; ALL:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL:                { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
; ALL:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL:                { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : o0 <= 4294967293 and o0 >= 0 };
 | 
			
		||||
; ALL:            MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL:                { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : o0 <= 4294967293 and o0 >= 0 };
 | 
			
		||||
; ALL:    }
 | 
			
		||||
; INNERMOST:      Function: f
 | 
			
		||||
; INNERMOST-NEXT: Region: %bb15---%bb13
 | 
			
		||||
; INNERMOST-NEXT: Max Loop Depth:  1
 | 
			
		||||
; INNERMOST-NEXT: Invariant Accesses: {
 | 
			
		||||
; INNERMOST-NEXT: }
 | 
			
		||||
; INNERMOST-NEXT: Context:
 | 
			
		||||
; INNERMOST-NEXT: [p_0, p_1, p_2] -> {  : p_0 >= 0 and p_0 <= 2147483647 and p_1 >= 0 and p_1 <= 4096 and p_2 >= 0 and p_2 <= 4096 }
 | 
			
		||||
; INNERMOST-NEXT: Assumed Context:
 | 
			
		||||
; INNERMOST-NEXT: [p_0, p_1, p_2] -> {  :  }
 | 
			
		||||
; INNERMOST-NEXT: Boundary Context:
 | 
			
		||||
; INNERMOST-NEXT: [p_0, p_1, p_2] -> {  :  }
 | 
			
		||||
; INNERMOST-NEXT: p0: {0,+,{0,+,1}<nuw><nsw><%bb11>}<nuw><nsw><%bb13>
 | 
			
		||||
; INNERMOST-NEXT: p1: {0,+,4}<nuw><nsw><%bb11>
 | 
			
		||||
; INNERMOST-NEXT: p2: {0,+,4}<nuw><nsw><%bb13>
 | 
			
		||||
; INNERMOST-NEXT: Arrays {
 | 
			
		||||
; INNERMOST-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; INNERMOST-NEXT:     i64 MemRef_indvars_iv_next6; // Element size 8
 | 
			
		||||
; INNERMOST-NEXT:     i32 MemRef_indvars_iv_next4; // Element size 4
 | 
			
		||||
; INNERMOST-NEXT: }
 | 
			
		||||
; INNERMOST-NEXT: Arrays (Bounds as pw_affs) {
 | 
			
		||||
; INNERMOST-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; INNERMOST-NEXT:     i64 MemRef_indvars_iv_next6; // Element size 8
 | 
			
		||||
; INNERMOST-NEXT:     i32 MemRef_indvars_iv_next4; // Element size 4
 | 
			
		||||
; INNERMOST-NEXT: }
 | 
			
		||||
; INNERMOST-NEXT: Alias Groups (0):
 | 
			
		||||
; INNERMOST-NEXT:     n/a
 | 
			
		||||
; INNERMOST-NEXT: Statements {
 | 
			
		||||
; INNERMOST-NEXT:     Stmt_bb16
 | 
			
		||||
; INNERMOST-NEXT:         Domain :=
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2] -> { Stmt_bb16[i0] : i0 >= 0 and i0 <= -1 + p_0 };
 | 
			
		||||
; INNERMOST-NEXT:         Schedule :=
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> [0, i0] };
 | 
			
		||||
; INNERMOST-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[o0] : 4o0 = p_1 };
 | 
			
		||||
; INNERMOST-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[o0] : 4o0 = p_2 };
 | 
			
		||||
; INNERMOST-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[i0] };
 | 
			
		||||
; INNERMOST-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[i0] };
 | 
			
		||||
; INNERMOST-NEXT:     Stmt_bb26
 | 
			
		||||
; INNERMOST-NEXT:         Domain :=
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2] -> { Stmt_bb26[] : p_0 >= 0 };
 | 
			
		||||
; INNERMOST-NEXT:         Schedule :=
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2] -> { Stmt_bb26[] -> [1, 0] };
 | 
			
		||||
; INNERMOST-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2] -> { Stmt_bb26[] -> MemRef_indvars_iv_next6[] };
 | 
			
		||||
; INNERMOST-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; INNERMOST-NEXT:             [p_0, p_1, p_2] -> { Stmt_bb26[] -> MemRef_indvars_iv_next4[] };
 | 
			
		||||
; INNERMOST-NEXT: }
 | 
			
		||||
 | 
			
		||||
; ALL:      Function: f
 | 
			
		||||
; ALL-NEXT: Region: %bb11---%bb29
 | 
			
		||||
; ALL-NEXT: Max Loop Depth:  2
 | 
			
		||||
; ALL-NEXT: Invariant Accesses: {
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
; ALL-NEXT: Context:
 | 
			
		||||
; ALL-NEXT: {  :  }
 | 
			
		||||
; ALL-NEXT: Assumed Context:
 | 
			
		||||
; ALL-NEXT: {  :  }
 | 
			
		||||
; ALL-NEXT: Boundary Context:
 | 
			
		||||
; ALL-NEXT: {  :  }
 | 
			
		||||
; ALL-NEXT: Arrays {
 | 
			
		||||
; ALL-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
; ALL-NEXT: Arrays (Bounds as pw_affs) {
 | 
			
		||||
; ALL-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
; ALL-NEXT: Alias Groups (0):
 | 
			
		||||
; ALL-NEXT:     n/a
 | 
			
		||||
; ALL-NEXT: Statements {
 | 
			
		||||
; ALL-NEXT:     Stmt_bb15__TO__bb25
 | 
			
		||||
; ALL-NEXT:         Domain :=
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb15__TO__bb25[i0, i1] : i0 <= 1023 and i0 >= 0 and i1 <= 1023 and i1 >= 0 };
 | 
			
		||||
; ALL-NEXT:         Schedule :=
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb15__TO__bb25[i0, i1] -> [i0, i1] };
 | 
			
		||||
; ALL-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[i0] };
 | 
			
		||||
; ALL-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
; ALL-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : o0 <= 4294967293 and o0 >= 0 };
 | 
			
		||||
; ALL-NEXT:         MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : o0 <= 4294967293 and o0 >= 0 };
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
;    void f(int *A) {
 | 
			
		||||
;      for (int i = 0; i < 1024; i++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,10 +6,17 @@
 | 
			
		|||
;          A[i * j]++;
 | 
			
		||||
;    }
 | 
			
		||||
;
 | 
			
		||||
; CHECK: ReadAccess := [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK:     { Stmt_bb7[i0, i1] -> MemRef_A[o0] : o0 <= 2046 and o0 >= 0 };
 | 
			
		||||
; CHECK: MayWriteAccess := [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK:     { Stmt_bb7[i0, i1] -> MemRef_A[o0] : o0 <= 2046 and o0 >= 0 };
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb7
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] : i0 <= 127 and i0 >= 0 and i1 <= 15 and i1 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] -> [i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] -> MemRef_A[o0] : o0 <= 2046 and o0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         MayWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] -> MemRef_A[o0] : o0 <= 2046 and o0 >= 0 };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,18 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:   [N] -> { Stmt_for_body[i0] -> MemRef_A[o0] : 5o0 >= -4 + N + 5i0 and 5o0 <= N + 5i0 };
 | 
			
		||||
; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:   [N] -> { Stmt_for_body[i0] -> MemRef_A[o0] : 5o0 <= 4 - N + 5i0 and 5o0 >= -N + 5i0 };
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_body[i0] : i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_body[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_body[i0] -> MemRef_A[o0] : 5o0 >= -4 + N + 5i0 and 5o0 <= N + 5i0 };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_body[i0] -> MemRef_A[o0] : 5o0 <= 4 - N + 5i0 and 5o0 >= -N + 5i0 };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_body[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
;    void f(int *A, int N) {
 | 
			
		||||
;      for (int i = 0; i < N; i++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,29 +6,36 @@
 | 
			
		|||
;        A[n % 42] += 1;
 | 
			
		||||
;    }
 | 
			
		||||
;
 | 
			
		||||
; CHECK: ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:     [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] :
 | 
			
		||||
; CHECK:          exists (e0 = floor((-n + o0)/42):
 | 
			
		||||
; CHECK:                  42e0 = -n + o0 and o0 <= 41 and o0 >= 0) };
 | 
			
		||||
; CHECK: MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:     [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] :
 | 
			
		||||
; CHECK:          exists (e0 = floor((-n + o0)/42):
 | 
			
		||||
; CHECK:                  42e0 = -n + o0 and o0 <= 41 and o0 >= 0) };
 | 
			
		||||
;
 | 
			
		||||
;    void neg(float *A, long n) {
 | 
			
		||||
;      for (long i = 0; i < 100; i++)
 | 
			
		||||
;        A[n % (-42)] += 1;
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb2
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb2[i0] : i0 <= 99 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb2[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] : exists (e0 = floor((-n + o0)/42): 42e0 = -n + o0 and o0 <= 41 and o0 >= 0) };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] : exists (e0 = floor((-n + o0)/42): 42e0 = -n + o0 and o0 <= 41 and o0 >= 0) };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK: ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:     [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] :
 | 
			
		||||
; CHECK:          exists (e0 = floor((-n + o0)/42):
 | 
			
		||||
; CHECK:                  42e0 = -n + o0 and o0 <= 41 and o0 >= 0) };
 | 
			
		||||
; CHECK: MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:     [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] :
 | 
			
		||||
; CHECK:          exists (e0 = floor((-n + o0)/42):
 | 
			
		||||
; CHECK:                  42e0 = -n + o0 and o0 <= 41 and o0 >= 0) };
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb2
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb2[i0] : i0 <= 99 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb2[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] : exists (e0 = floor((-n + o0)/42): 42e0 = -n + o0 and o0 <= 41 and o0 >= 0) };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] : exists (e0 = floor((-n + o0)/42): 42e0 = -n + o0 and o0 <= 41 and o0 >= 0) };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @pos(float* %A, i64 %n) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,32 +20,38 @@
 | 
			
		|||
;
 | 
			
		||||
; INNERMOST-NOT:    Function: f
 | 
			
		||||
;
 | 
			
		||||
; ALL:    Function: f
 | 
			
		||||
; ALL:    Region: %bb3---%bb19
 | 
			
		||||
; ALL:    Max Loop Depth:  1
 | 
			
		||||
; ALL:    Context:
 | 
			
		||||
; ALL:    {  :  }
 | 
			
		||||
; ALL:    Assumed Context:
 | 
			
		||||
; ALL:    {  :  }
 | 
			
		||||
; ALL:    Alias Groups (0):
 | 
			
		||||
; ALL:        n/a
 | 
			
		||||
; ALL:    Statements {
 | 
			
		||||
; ALL:      Stmt_bb4__TO__bb17
 | 
			
		||||
; ALL:            Domain :=
 | 
			
		||||
; ALL:                { Stmt_bb4__TO__bb17[i0] :
 | 
			
		||||
; ALL-DAG:               i0 >= 0
 | 
			
		||||
; ALL-DAG:             and
 | 
			
		||||
; ALL-DAG:               i0 <= 1023
 | 
			
		||||
; ALL:                }
 | 
			
		||||
; ALL:            Schedule :=
 | 
			
		||||
; ALL:                { Stmt_bb4__TO__bb17[i0] -> [i0] };
 | 
			
		||||
; ALL:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL:                { Stmt_bb4__TO__bb17[i0] -> MemRef_A[i0] };
 | 
			
		||||
; ALL:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL:                { Stmt_bb4__TO__bb17[i0] -> MemRef_A[o0] : o0 <= 2147483645 and o0 >= 0 };
 | 
			
		||||
; ALL:            MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL:                { Stmt_bb4__TO__bb17[i0] -> MemRef_A[o0] : o0 <= 2147483645 and o0 >= 0 };
 | 
			
		||||
; ALL:    }
 | 
			
		||||
; ALL:      Function: f
 | 
			
		||||
; ALL-NEXT: Region: %bb3---%bb19
 | 
			
		||||
; ALL-NEXT: Max Loop Depth:  1
 | 
			
		||||
; ALL-NEXT: Invariant Accesses: {
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
; ALL-NEXT: Context:
 | 
			
		||||
; ALL-NEXT: {  :  }
 | 
			
		||||
; ALL-NEXT: Assumed Context:
 | 
			
		||||
; ALL-NEXT: {  :  }
 | 
			
		||||
; ALL-NEXT: Boundary Context:
 | 
			
		||||
; ALL-NEXT: {  :  }
 | 
			
		||||
; ALL-NEXT: Arrays {
 | 
			
		||||
; ALL-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
; ALL-NEXT: Arrays (Bounds as pw_affs) {
 | 
			
		||||
; ALL-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
; ALL-NEXT: Alias Groups (0):
 | 
			
		||||
; ALL-NEXT:     n/a
 | 
			
		||||
; ALL-NEXT: Statements {
 | 
			
		||||
; ALL-NEXT:     Stmt_bb4__TO__bb17
 | 
			
		||||
; ALL-NEXT:         Domain :=
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb4__TO__bb17[i0] : i0 <= 1023 and i0 >= 0 };
 | 
			
		||||
; ALL-NEXT:         Schedule :=
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb4__TO__bb17[i0] -> [i0] };
 | 
			
		||||
; ALL-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb4__TO__bb17[i0] -> MemRef_A[i0] };
 | 
			
		||||
; ALL-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb4__TO__bb17[i0] -> MemRef_A[o0] : o0 <= 2147483645 and o0 >= 0 };
 | 
			
		||||
; ALL-NEXT:         MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb4__TO__bb17[i0] -> MemRef_A[o0] : o0 <= 2147483645 and o0 >= 0 };
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
;    void f(int *A, int N) {
 | 
			
		||||
;      for (int i = 0; i < 1024; i++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,32 +24,38 @@
 | 
			
		|||
;
 | 
			
		||||
; INNERMOST-NOT:    Function: f
 | 
			
		||||
;
 | 
			
		||||
; ALL:    Function: f
 | 
			
		||||
; ALL:    Region: %bb3---%bb20
 | 
			
		||||
; ALL:    Max Loop Depth:  1
 | 
			
		||||
; ALL:    Context:
 | 
			
		||||
; ALL:    {  :  }
 | 
			
		||||
; ALL:    Assumed Context:
 | 
			
		||||
; ALL:    {  :  }
 | 
			
		||||
; ALL:    Alias Groups (0):
 | 
			
		||||
; ALL:        n/a
 | 
			
		||||
; ALL:    Statements {
 | 
			
		||||
; ALL:      Stmt_bb4__TO__bb18
 | 
			
		||||
; ALL:            Domain :=
 | 
			
		||||
; ALL:                { Stmt_bb4__TO__bb18[i0] :
 | 
			
		||||
; ALL-DAG:               i0 >= 0
 | 
			
		||||
; ALL-DAG:             and
 | 
			
		||||
; ALL-DAG:               i0 <= 1023
 | 
			
		||||
; ALL:                }
 | 
			
		||||
; ALL:            Schedule :=
 | 
			
		||||
; ALL:                { Stmt_bb4__TO__bb18[i0] -> [i0] };
 | 
			
		||||
; ALL:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL:                { Stmt_bb4__TO__bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; ALL:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL:                { Stmt_bb4__TO__bb18[i0] -> MemRef_A[o0] : o0 <= 2199023254526 and o0 >= 0 };
 | 
			
		||||
; ALL:            MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL:                { Stmt_bb4__TO__bb18[i0] -> MemRef_A[o0] : o0 <= 2199023254526 and o0 >= 0 };
 | 
			
		||||
; ALL:    }
 | 
			
		||||
; ALL:      Function: f
 | 
			
		||||
; ALL-NEXT: Region: %bb3---%bb20
 | 
			
		||||
; ALL-NEXT: Max Loop Depth:  1
 | 
			
		||||
; ALL-NEXT: Invariant Accesses: {
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
; ALL-NEXT: Context:
 | 
			
		||||
; ALL-NEXT: {  :  }
 | 
			
		||||
; ALL-NEXT: Assumed Context:
 | 
			
		||||
; ALL-NEXT: {  :  }
 | 
			
		||||
; ALL-NEXT: Boundary Context:
 | 
			
		||||
; ALL-NEXT: {  :  }
 | 
			
		||||
; ALL-NEXT: Arrays {
 | 
			
		||||
; ALL-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
; ALL-NEXT: Arrays (Bounds as pw_affs) {
 | 
			
		||||
; ALL-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
; ALL-NEXT: Alias Groups (0):
 | 
			
		||||
; ALL-NEXT:     n/a
 | 
			
		||||
; ALL-NEXT: Statements {
 | 
			
		||||
; ALL-NEXT:     Stmt_bb4__TO__bb18
 | 
			
		||||
; ALL-NEXT:         Domain :=
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb4__TO__bb18[i0] : i0 <= 1023 and i0 >= 0 };
 | 
			
		||||
; ALL-NEXT:         Schedule :=
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb4__TO__bb18[i0] -> [i0] };
 | 
			
		||||
; ALL-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb4__TO__bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; ALL-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb4__TO__bb18[i0] -> MemRef_A[o0] : o0 <= 2199023254526 and o0 >= 0 };
 | 
			
		||||
; ALL-NEXT:         MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; ALL-NEXT:             { Stmt_bb4__TO__bb18[i0] -> MemRef_A[o0] : o0 <= 2199023254526 and o0 >= 0 };
 | 
			
		||||
; ALL-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; PROFIT-NOT: Statements
 | 
			
		||||
;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,28 +7,40 @@
 | 
			
		|||
;          A[i]++;
 | 
			
		||||
;    }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Function: f
 | 
			
		||||
; CHECK:    Region: %bb1---%bb14
 | 
			
		||||
; CHECK:    Max Loop Depth:  1
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK:      Stmt_bb2__TO__bb12
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                { Stmt_bb2__TO__bb12[i0] :
 | 
			
		||||
; CHECK-DAG:               i0 >= 0
 | 
			
		||||
; CHECK-DAG:             and
 | 
			
		||||
; CHECK-DAG:               i0 <= 1023
 | 
			
		||||
; CHECK:                }
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                { Stmt_bb2__TO__bb12[i0] -> [i0] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_bb2__TO__bb12[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_bb2__TO__bb12[i0] -> MemRef_A[-1 + i0] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_bb2__TO__bb12[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:            MayWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_bb2__TO__bb12[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
; CHECK:      Function: f
 | 
			
		||||
; CHECK-NEXT: Region: %bb1---%bb14
 | 
			
		||||
; CHECK-NEXT: Max Loop Depth:  1
 | 
			
		||||
; CHECK-NEXT: Invariant Accesses: {
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
; CHECK-NEXT: Context:
 | 
			
		||||
; CHECK-NEXT: {  :  }
 | 
			
		||||
; CHECK-NEXT: Assumed Context:
 | 
			
		||||
; CHECK-NEXT: {  :  }
 | 
			
		||||
; CHECK-NEXT: Boundary Context:
 | 
			
		||||
; CHECK-NEXT: {  :  }
 | 
			
		||||
; CHECK-NEXT: Arrays {
 | 
			
		||||
; CHECK-NEXT:     float MemRef_A[*]; // Element size 4
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
; CHECK-NEXT: Arrays (Bounds as pw_affs) {
 | 
			
		||||
; CHECK-NEXT:     float MemRef_A[*]; // Element size 4
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
; CHECK-NEXT: Alias Groups (0):
 | 
			
		||||
; CHECK-NEXT:     n/a
 | 
			
		||||
; CHECK-NEXT: Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb2__TO__bb12
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb2__TO__bb12[i0] : i0 <= 1023 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb2__TO__bb12[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb2__TO__bb12[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb2__TO__bb12[i0] -> MemRef_A[-1 + i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb2__TO__bb12[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb2__TO__bb12[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @f(float* %A) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,26 +21,40 @@
 | 
			
		|||
;      }
 | 
			
		||||
;    }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Function: f
 | 
			
		||||
; CHECK:    Region: %bb1---%bb12
 | 
			
		||||
; CHECK:    Max Loop Depth:  1
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK:      Stmt_bb3__TO__bb10
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                { Stmt_bb3__TO__bb10[i0] :
 | 
			
		||||
; CHECK-DAG:               i0 >= 0
 | 
			
		||||
; CHECK-DAG:             and
 | 
			
		||||
; CHECK-DAG:               i0 <= 1023
 | 
			
		||||
; CHECK:                }
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                { Stmt_bb3__TO__bb10[i0] -> [i0] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_bb3__TO__bb10[i0] -> MemRef_C[i0] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_bb3__TO__bb10[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:            MayWriteAccess :=  [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_bb3__TO__bb10[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
; CHECK:      Function: f
 | 
			
		||||
; CHECK-NEXT: Region: %bb1---%bb12
 | 
			
		||||
; CHECK-NEXT: Max Loop Depth:  1
 | 
			
		||||
; CHECK-NEXT: Invariant Accesses: {
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
; CHECK-NEXT: Context:
 | 
			
		||||
; CHECK-NEXT: {  :  }
 | 
			
		||||
; CHECK-NEXT: Assumed Context:
 | 
			
		||||
; CHECK-NEXT: {  :  }
 | 
			
		||||
; CHECK-NEXT: Boundary Context:
 | 
			
		||||
; CHECK-NEXT: {  :  }
 | 
			
		||||
; CHECK-NEXT: Arrays {
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_C[*]; // Element size 4
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
; CHECK-NEXT: Arrays (Bounds as pw_affs) {
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_C[*]; // Element size 4
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
; CHECK-NEXT: Alias Groups (1):
 | 
			
		||||
; CHECK-NEXT:     {{\[\[}} <{ MemRef_C[(0)] }, { MemRef_C[(1024)] }> <{ MemRef_A[(0)] }, { MemRef_A[(1024)] }> {{\]\]}}
 | 
			
		||||
; CHECK-NEXT: Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb3__TO__bb10
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb3__TO__bb10[i0] : i0 <= 1023 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb3__TO__bb10[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb3__TO__bb10[i0] -> MemRef_C[i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb3__TO__bb10[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MayWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb3__TO__bb10[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
; PROFIT-NOT: Statements
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,61 +9,88 @@
 | 
			
		|||
; Verify that we over approximate the read acces of A[j] in the last statement as j is
 | 
			
		||||
; computed in a non-affine loop we do not model.
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Function: f
 | 
			
		||||
; CHECK:    Region: %bb2---%bb24
 | 
			
		||||
; CHECK:    Max Loop Depth:  1
 | 
			
		||||
; CHECK:    Context:
 | 
			
		||||
; CHECK:    [N] -> {  :
 | 
			
		||||
; CHECK-DAG:         N >= -2147483648
 | 
			
		||||
; CHECK-DAG:       and
 | 
			
		||||
; CHECK-DAG:         N <= 2147483647
 | 
			
		||||
; CHECK:           }
 | 
			
		||||
; CHECK:    Assumed Context:
 | 
			
		||||
; CHECK:    [N] -> {  :  }
 | 
			
		||||
; CHECK:    p0: %N
 | 
			
		||||
; CHECK:    Alias Groups (0):
 | 
			
		||||
; CHECK:        n/a
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK:      Stmt_bb2
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb2[i0] -> MemRef_j_0__phi[] };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb2[i0] -> MemRef_j_0[] };
 | 
			
		||||
; CHECK:      Stmt_bb4__TO__bb18
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb4__TO__bb18[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:            MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_smax[] };
 | 
			
		||||
; CHECK:            MayWriteAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_j_2__phi[] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_j_0[] };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_j_2__phi[] };
 | 
			
		||||
; CHECK:      Stmt_bb18
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb18[i0] -> [i0, 2] };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb18[i0] -> MemRef_j_2[] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb18[i0] -> MemRef_j_2__phi[] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb18[i0] -> MemRef_A[o0] : o0 >= -2147483648 and o0 <= 2147483645 };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:      Stmt_bb23
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb23[i0] -> [i0, 3] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb23[i0] -> MemRef_j_2[] };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                [N] -> { Stmt_bb23[i0] -> MemRef_j_0__phi[] };
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
; CHECK:      Function: f
 | 
			
		||||
; CHECK-NEXT: Region: %bb2---%bb24
 | 
			
		||||
; CHECK-NEXT: Max Loop Depth:  1
 | 
			
		||||
; CHECK-NEXT: Invariant Accesses: {
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
; CHECK-NEXT: Context:
 | 
			
		||||
; CHECK-NEXT: [N] -> {  : N >= -2147483648 and N <= 2147483647 }
 | 
			
		||||
; CHECK-NEXT: Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [N] -> {  :  }
 | 
			
		||||
; CHECK-NEXT: Boundary Context:
 | 
			
		||||
; CHECK-NEXT: [N] -> {  :  }
 | 
			
		||||
; CHECK-NEXT: p0: %N
 | 
			
		||||
; CHECK-NEXT: Arrays {
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_j_0__phi; // Element size 4
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_j_0; // Element size 4
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_smax; // Element size 4
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_j_2__phi; // Element size 4
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_j_2; // Element size 4
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
; CHECK-NEXT: Arrays (Bounds as pw_affs) {
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_j_0__phi; // Element size 4
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_j_0; // Element size 4
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_smax; // Element size 4
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_j_2__phi; // Element size 4
 | 
			
		||||
; CHECK-NEXT:     i32 MemRef_j_2; // Element size 4
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
; CHECK-NEXT: Alias Groups (0):
 | 
			
		||||
; CHECK-NEXT:     n/a
 | 
			
		||||
; CHECK-NEXT: Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb2
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb2[i0] : i0 >= 0 and i0 <= N; Stmt_bb2[0] : N <= -1 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb2[i0] -> [i0, 0] : i0 <= N; Stmt_bb2[0] -> [0, 0] : N <= -1 };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb2[i0] -> MemRef_j_0__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb2[i0] -> MemRef_j_0[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb4__TO__bb18
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb4__TO__bb18[i0] : i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb4__TO__bb18[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_smax[] };
 | 
			
		||||
; CHECK-NEXT:         MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_j_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_j_0[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_j_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb18
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb18[i0] : i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb18[i0] -> [i0, 2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb18[i0] -> MemRef_j_2[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb18[i0] -> MemRef_j_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb18[i0] -> MemRef_A[o0] : o0 >= -2147483648 and o0 <= 2147483645 };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb23
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb23[i0] : i0 <= -1 + N and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb23[i0] -> [i0, 3] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb23[i0] -> MemRef_j_2[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb23[i0] -> MemRef_j_0__phi[] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; PROFIT-NOT: Statements
 | 
			
		||||
;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,11 +24,16 @@ for.end:
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; CHECK: p0: %n
 | 
			
		||||
 | 
			
		||||
; CHECK: Schedule
 | 
			
		||||
; CHECK:   [n] -> { Stmt_for_body[i0] -> [i0] };
 | 
			
		||||
; CHECK: ReadAccess
 | 
			
		||||
; CHECK:   [n] -> { Stmt_for_body[i0] -> MemRef_INDEX[i0] };
 | 
			
		||||
; CHECK: WriteAccess
 | 
			
		||||
; CHECK:   [n] -> { Stmt_for_body[i0] -> MemRef_A[o0] : o0 >= -1152921504606846976 and o0 <= 1152921504606846973 };
 | 
			
		||||
; CHECK:      p0: %n
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_for_body[i0] : i0 >= 0 and i0 <= -1 + n };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_for_body[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_for_body[i0] -> MemRef_INDEX[i0] };
 | 
			
		||||
; CHECK-NEXT:         MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_for_body[i0] -> MemRef_A[o0] : o0 >= -1152921504606846976 and o0 <= 1152921504606846973 };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,12 +15,8 @@
 | 
			
		|||
; is such that the first loop is never executed and consequently A is never
 | 
			
		||||
; accessed. In this case the value of m does not matter.
 | 
			
		||||
 | 
			
		||||
; CHECK: Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [n, m, p] -> { :
 | 
			
		||||
; CHECK-DAG:                   (n >= 1 and m <= 20 and p <= 20)
 | 
			
		||||
; CHECK-DAG:                    or
 | 
			
		||||
; CHECK-DAG:                   (n <= 0 and p <= 20)
 | 
			
		||||
; CHECK:                   }
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [n, m, p] -> {  : (n <= 0 and p <= 20) or (n >= 1 and m <= 20 and p <= 20) }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,178 +43,176 @@
 | 
			
		|||
;   M_NEQ: *A = 0;
 | 
			
		||||
;
 | 
			
		||||
; }
 | 
			
		||||
; CHECK:           Stmt_BC
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_BC[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_BC[] -> [0] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_BC[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_S_BC
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_BC[] : bool_cond <= -1 or bool_cond >= 1 };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_BC[] -> [1] : bool_cond <= -1 or bool_cond >= 1 };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_BC[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_M_BC
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_BC[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_BC[] -> [2] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_BC[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_NEG_BC
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_NEG_BC[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_NEG_BC[] -> [3] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_NEG_BC[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_S_NEG_BC
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_NEG_BC[] : bool_cond = 0 };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_NEG_BC[] -> [4] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_NEG_BC[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_M_NEG_BC
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_NEG_BC[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_NEG_BC[] -> [5] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_NEG_BC[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_SLT
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_SLT[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_SLT[] -> [6] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_SLT[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_S_SLT
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_SLT[] : rhs >= 1 + lhs };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_SLT[] -> [7] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_SLT[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_M_SLT
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_SLT[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_SLT[] -> [8] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_SLT[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_SLE
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_SLE[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_SLE[] -> [9] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_SLE[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_S_SLE
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_SLE[] : rhs >= lhs };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_SLE[] -> [10] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_SLE[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_M_SLE
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_SLE[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_SLE[] -> [11] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_SLE[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_SGT
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_SGT[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_SGT[] -> [12] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_SGT[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_S_SGT
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_SGT[] : rhs <= -1 + lhs };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_SGT[] -> [13] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_SGT[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_M_SGT
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_SGT[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_SGT[] -> [14] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_SGT[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_SGE
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_SGE[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_SGE[] -> [15] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_SGE[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_S_SGE
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_SGE[] : rhs <= lhs };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_SGE[] -> [16] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_SGE[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_M_SGE
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_SGE[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_SGE[] -> [17] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_SGE[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_EQ
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_EQ[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_EQ[] -> [18] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_EQ[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_S_EQ
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_EQ[] : rhs = lhs };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_EQ[] -> [19] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_EQ[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_M_EQ
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_EQ[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_EQ[] -> [20] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_EQ[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_NEQ
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_NEQ[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_NEQ[] -> [21] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_NEQ[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_S_NEQ
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_NEQ[] :
 | 
			
		||||
; CHECK-DAG:                                             rhs >= 1 + lhs 
 | 
			
		||||
; CHECK-DAG:                                           or
 | 
			
		||||
; CHECK-DAG:                                             rhs <= -1 + lhs
 | 
			
		||||
; CHECK:                                              };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_NEQ[] -> [22] : rhs >= 1 + lhs or rhs <= -1 + lhs };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_S_NEQ[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_M_NEQ
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_NEQ[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_NEQ[] -> [23] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [bool_cond, lhs, rhs] -> { Stmt_M_NEQ[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_BC
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_BC[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_BC[] -> [0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_BC[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_S_BC
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_BC[] : bool_cond <= -1 or bool_cond >= 1 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_BC[] -> [1] : bool_cond <= -1 or bool_cond >= 1 };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_BC[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_M_BC
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_BC[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_BC[] -> [2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_BC[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_NEG_BC
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_NEG_BC[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_NEG_BC[] -> [3] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_NEG_BC[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_S_NEG_BC
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_NEG_BC[] : bool_cond = 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_NEG_BC[] -> [4] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_NEG_BC[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_M_NEG_BC
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_NEG_BC[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_NEG_BC[] -> [5] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_NEG_BC[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_SLT
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_SLT[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_SLT[] -> [6] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_SLT[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_S_SLT
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_SLT[] : rhs >= 1 + lhs };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_SLT[] -> [7] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_SLT[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_M_SLT
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_SLT[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_SLT[] -> [8] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_SLT[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_SLE
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_SLE[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_SLE[] -> [9] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_SLE[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_S_SLE
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_SLE[] : rhs >= lhs };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_SLE[] -> [10] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_SLE[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_M_SLE
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_SLE[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_SLE[] -> [11] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_SLE[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_SGT
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_SGT[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_SGT[] -> [12] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_SGT[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_S_SGT
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_SGT[] : rhs <= -1 + lhs };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_SGT[] -> [13] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_SGT[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_M_SGT
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_SGT[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_SGT[] -> [14] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_SGT[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_SGE
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_SGE[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_SGE[] -> [15] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_SGE[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_S_SGE
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_SGE[] : rhs <= lhs };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_SGE[] -> [16] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_SGE[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_M_SGE
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_SGE[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_SGE[] -> [17] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_SGE[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_EQ
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_EQ[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_EQ[] -> [18] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_EQ[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_S_EQ
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_EQ[] : rhs = lhs };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_EQ[] -> [19] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_EQ[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_M_EQ
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_EQ[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_EQ[] -> [20] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_EQ[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_NEQ
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_NEQ[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_NEQ[] -> [21] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_NEQ[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_S_NEQ
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_NEQ[] : rhs >= 1 + lhs or rhs <= -1 + lhs };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_NEQ[] -> [22] : rhs >= 1 + lhs or rhs <= -1 + lhs };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_S_NEQ[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_M_NEQ
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_NEQ[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_NEQ[] -> [23] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bool_cond, lhs, rhs] -> { Stmt_M_NEQ[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,34 +1,35 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Stmt_for_body_outer
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                { Stmt_for_body_outer[i0] : i0 <= 257 and i0 >= 0 };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                { Stmt_for_body_outer[i0] -> [i0, 0, 0, 0] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_for_body_outer[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_for_body_outer[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:      Stmt_for_body
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                { Stmt_for_body[257, i1] : i1 <= 1025 and i1 >= 0; Stmt_for_body[i0, 0] : i0 <= 256 and i0 >= 0 };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                { Stmt_for_body[257, i1] -> [257, 1, i1, 0]; Stmt_for_body[i0, 0] -> [i0, 1, 0, 0] : i0 <= 256 };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_for_body[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_for_body[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
; CHECK:      Stmt_for_inc
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                { Stmt_for_inc[257, i1] : i1 <= 1025 and i1 >= 0 };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                { Stmt_for_inc[i0, i1] -> [257, 1, i1, 1] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_for_inc[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_for_inc[i0, i1] -> MemRef_A[i1] }
 | 
			
		||||
;
 | 
			
		||||
; ModuleID = 'bugpoint-reduced-simplified.bc'
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body_outer
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body_outer[i0] : i0 <= 257 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body_outer[i0] -> [i0, 0, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body_outer[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body_outer[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body[257, i1] : i1 <= 1025 and i1 >= 0; Stmt_for_body[i0, 0] : i0 <= 256 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body[257, i1] -> [257, 1, i1, 0]; Stmt_for_body[i0, 0] -> [i0, 1, 0, 0] : i0 <= 256 };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_inc
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_inc[257, i1] : i1 <= 1025 and i1 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_inc[i0, i1] -> [257, 1, i1, 1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_inc[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_inc[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-i128:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @foo(i32* %A) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,18 +14,35 @@
 | 
			
		|||
;       A[i] += i;
 | 
			
		||||
;   }
 | 
			
		||||
; }
 | 
			
		||||
 | 
			
		||||
; CHECK-LABEL: Function: or
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Function: or
 | 
			
		||||
; CHECK:   Stmt_if_then
 | 
			
		||||
; CHECK:     Domain :=
 | 
			
		||||
; CHECK:       [n, m] -> { Stmt_if_then[i0] : (i0 <= 99 and i0 >= 0 and i0 <= -1 + m) or (i0 <= 99 and i0 >= 0 and i0 <= -1 + n) };
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Function: and
 | 
			
		||||
; CHECK:   Stmt_if_then
 | 
			
		||||
; CHECK:     Domain :=
 | 
			
		||||
; CHECK:       [n, m] -> { Stmt_if_then[i0] : i0 <= 99 and i0 >= 0 and i0 <= -1 + m and i0 <= -1 + n }
 | 
			
		||||
; CHECK:       Statements {
 | 
			
		||||
; CHECK-NEXT:      Stmt_if_then
 | 
			
		||||
; CHECK-NEXT:          Domain :=
 | 
			
		||||
; CHECK-NEXT:              [n, m] -> { Stmt_if_then[i0] : (i0 <= 99 and i0 >= 0 and i0 <= -1 + m) or (i0 <= 99 and i0 >= 0 and i0 <= -1 + n) };
 | 
			
		||||
; CHECK-NEXT:          Schedule :=
 | 
			
		||||
; CHECK-NEXT:              [n, m] -> { Stmt_if_then[i0] -> [i0] : i0 <= -1 + m or i0 <= -1 + n };
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:              [n, m] -> { Stmt_if_then[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:              [n, m] -> { Stmt_if_then[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:  }
 | 
			
		||||
;
 | 
			
		||||
; CHECK-LABEL: Function: and
 | 
			
		||||
;
 | 
			
		||||
; CHECK:       Statements {
 | 
			
		||||
; CHECK-NEXT:      Stmt_if_then
 | 
			
		||||
; CHECK-NEXT:          Domain :=
 | 
			
		||||
; CHECK-NEXT:              [n, m] -> { Stmt_if_then[i0] : i0 <= 99 and i0 >= 0 and i0 <= -1 + m and i0 <= -1 + n };
 | 
			
		||||
; CHECK-NEXT:          Schedule :=
 | 
			
		||||
; CHECK-NEXT:              [n, m] -> { Stmt_if_then[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:              [n, m] -> { Stmt_if_then[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:              [n, m] -> { Stmt_if_then[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:  }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
; Function Attrs: nounwind uwtable
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,19 +1,20 @@
 | 
			
		|||
; RUN: opt %loadPolly -analyze -polly-scops %s | FileCheck %s
 | 
			
		||||
 | 
			
		||||
; CHECK-LABEL: Function: foo
 | 
			
		||||
;
 | 
			
		||||
; CHECK:       Statements {
 | 
			
		||||
; CHECK-NEXT:      Stmt_body
 | 
			
		||||
; CHECK-NEXT:          Domain :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_body[i0] : i0 <= 100 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:          Schedule :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_body[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_body[i0] -> MemRef_sum__phi[] };
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_body[i0] -> MemRef_sum__phi[] };
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_body[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_body[i0] -> MemRef_sum_next[] };
 | 
			
		||||
; CHECK-NEXT:  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,20 +5,21 @@
 | 
			
		|||
; PHI ReadAccess.
 | 
			
		||||
 | 
			
		||||
; CHECK-LABEL: Function: foo
 | 
			
		||||
;
 | 
			
		||||
; CHECK:       Statements {
 | 
			
		||||
; CHECK-NEXT:      Stmt_header
 | 
			
		||||
; CHECK-NEXT:          Domain :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_header[] };
 | 
			
		||||
; CHECK-NEXT:          Schedule :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_header[] -> [0, 0] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_header[] -> MemRef_phi[] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_body
 | 
			
		||||
; CHECK-NEXT:          Domain :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_body[i0] : i0 <= 100 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:          Schedule :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_body[i0] -> [1, i0] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_body[i0] -> MemRef_phi[] };
 | 
			
		||||
; CHECK-NEXT:  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,29 +1,28 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-scops -analyze \
 | 
			
		||||
; RUN:     -S < %s | FileCheck %s
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; CHECK: Statements {
 | 
			
		||||
; CHECK-NEXT:   Stmt_loop__TO__backedge
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_loop__TO__backedge
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_loop__TO__backedge[i0] : i0 <= 100 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_loop__TO__backedge[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_loop__TO__backedge[i0] -> MemRef_merge__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MayWriteAccess :=   [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:         MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_loop__TO__backedge[i0] -> MemRef_merge__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MayWriteAccess :=   [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:         MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_loop__TO__backedge[i0] -> MemRef_merge__phi[] };
 | 
			
		||||
; CHECK-NEXT:   Stmt_backedge
 | 
			
		||||
; CHECK-NEXT:     Stmt_backedge
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_backedge[i0] : i0 <= 100 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_backedge[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_backedge[i0] -> MemRef_merge__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_backedge[i0] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:       }
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
define void @foo(float* %A, i1 %cond0, i1 %cond1) {
 | 
			
		||||
entry:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,14 +12,26 @@
 | 
			
		|||
;   }
 | 
			
		||||
; }
 | 
			
		||||
 | 
			
		||||
; CHECK:      Invariant Accesses: {
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_j[i0, i1] -> MemRef_init_ptr[0] };
 | 
			
		||||
; CHECK-NEXT:         Execution Context: [N] -> {  : N <= -1 or N >= 1 }
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_j
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_j[i0, i1] : i0 >= 0 and i0 <= -1 + N and i1 >= 0 and i1 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_j[i0, i1] -> MemRef_init[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_j[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
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"
 | 
			
		||||
 | 
			
		||||
; CHECK:       Invariant Accesses: {
 | 
			
		||||
; CHECK:           ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:              MemRef_init_ptr[0]
 | 
			
		||||
; CHECK-NOT:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NOT:          MemRef_init_ptr[0]
 | 
			
		||||
; CHECK:       }
 | 
			
		||||
define void @f(i64* noalias %A, i64 %N, i64* noalias %init_ptr) #0 {
 | 
			
		||||
entry:
 | 
			
		||||
  br label %for.i
 | 
			
		||||
| 
						 | 
				
			
			@ -31,18 +43,12 @@ for.i:                                            ; preds = %for.i.end, %entry
 | 
			
		|||
 | 
			
		||||
entry.next:                                       ; preds = %for.i
 | 
			
		||||
  %init = load i64, i64* %init_ptr
 | 
			
		||||
; CHECK-NOT: Stmt_entry_next
 | 
			
		||||
  br label %for.j
 | 
			
		||||
 | 
			
		||||
for.j:                                            ; preds = %for.j, %entry.next
 | 
			
		||||
  %indvar.j = phi i64 [ 0, %entry.next ], [ %indvar.j.next, %for.j ]
 | 
			
		||||
  %init_2 = load i64, i64* %init_ptr
 | 
			
		||||
  %init_sum = add i64 %init, %init_2
 | 
			
		||||
; CHECK:      Stmt_for_j
 | 
			
		||||
; CHECK:           ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:          [N] -> { Stmt_for_j[i0, i1] -> MemRef_init[] };
 | 
			
		||||
; CHECK-NEXT:      MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:          [N] -> { Stmt_for_j[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
  %scevgep = getelementptr i64, i64* %A, i64 %indvar.j
 | 
			
		||||
  store i64 %init_sum, i64* %scevgep
 | 
			
		||||
  %indvar.j.next = add nsw i64 %indvar.j, 1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,34 +1,33 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
 | 
			
		||||
; RUN: opt %loadPolly -polly-codegen -analyze < %s
 | 
			
		||||
;
 | 
			
		||||
;
 | 
			
		||||
; CHECK:         Statements {
 | 
			
		||||
; CHECK-NEXT:      Stmt_top_split
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [p_0, p_1, p_2] -> { Stmt_top_split[] };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [p_0, p_1, p_2] -> { Stmt_top_split[] -> [0, 0, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:                [p_0, p_1, p_2] -> { Stmt_top_split[] -> MemRef_25[] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:                [p_0, p_1, p_2] -> { Stmt_top_split[] -> MemRef_26[] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_L_4
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] : i0 >= 0 and i0 <= -1 + p_0 and i1 >= 0 and i1 <= -1 + p_0 and i2 >= 0 and i2 <= -1 + p_0 };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] -> [1, i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:            ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:                [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] -> MemRef_25[] };
 | 
			
		||||
; CHECK-NEXT:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] -> MemRef_19[i1, i0] };
 | 
			
		||||
; CHECK-NEXT:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] -> MemRef_5[i2, i0] };
 | 
			
		||||
; CHECK-NEXT:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] -> MemRef_12[i2, i1] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] -> MemRef_19[i1, i0] };
 | 
			
		||||
; CHECK-NEXT:    }
 | 
			
		||||
;
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_top_split
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [p_0, p_1, p_2] -> { Stmt_top_split[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [p_0, p_1, p_2] -> { Stmt_top_split[] -> [0, 0, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [p_0, p_1, p_2] -> { Stmt_top_split[] -> MemRef_25[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [p_0, p_1, p_2] -> { Stmt_top_split[] -> MemRef_26[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_L_4
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] : i0 >= 0 and i0 <= -1 + p_0 and i1 >= 0 and i1 <= -1 + p_0 and i2 >= 0 and i2 <= -1 + p_0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] -> [1, i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] -> MemRef_25[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] -> MemRef_19[i1, i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] -> MemRef_5[i2, i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] -> MemRef_12[i2, i1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] -> MemRef_19[i1, i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
%jl_value_t = type { %jl_value_t* }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,26 +18,24 @@
 | 
			
		|||
;      return x + y;
 | 
			
		||||
;    }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:   Invariant Accesses: {
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_do_body[i0] -> MemRef_S[0] };
 | 
			
		||||
; CHECK:            Execution Context: {  :  }
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_do_body[i0] -> MemRef_S[1] };
 | 
			
		||||
; CHECK:            Execution Context: {  :  }
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
; CHECK:      Invariant Accesses: {
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_do_body[i0] -> MemRef_S[0] };
 | 
			
		||||
; CHECK-NEXT:         Execution Context: {  :  }
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_do_body[i0] -> MemRef_S[1] };
 | 
			
		||||
; CHECK-NEXT:         Execution Context: {  :  }
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:      Stmt_do_body
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                { Stmt_do_body[i0] : i0 <= 1000 and i0 >= 0 };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                { Stmt_do_body[i0] -> [i0] };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_do_body[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_do_body
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_do_body[i0] : i0 <= 1000 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_do_body[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_do_body[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CODEGEN: entry:
 | 
			
		||||
; CODEGEN:   %S.b.preload.s2a = alloca float
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,23 +7,21 @@
 | 
			
		|||
;        A[i] = (*(int *)&U) + (int)(*(float *)&U);
 | 
			
		||||
;    }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Invariant Accesses: {
 | 
			
		||||
; CHECK-NOT:        ReadAccess
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_for_body[i0] -> MemRef_U[0] };
 | 
			
		||||
; CHECK:            Execution Context: {  :  }
 | 
			
		||||
; CHECK-NOT:        ReadAccess
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
; CHECK:      Invariant Accesses: {
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body[i0] -> MemRef_U[0] };
 | 
			
		||||
; CHECK-NEXT:         Execution Context: {  :  }
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK:      Stmt_for_body
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                { Stmt_for_body[i0] : i0 <= 999 and i0 >= 0 };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                { Stmt_for_body[i0] -> [i0] };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_for_body[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body[i0] : i0 <= 999 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CODEGEN: entry:
 | 
			
		||||
; CODEGEN:   %U.f.preload.s2a = alloca float
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,23 +12,21 @@
 | 
			
		|||
;      return x + y;
 | 
			
		||||
;    }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Invariant Accesses: {
 | 
			
		||||
; CHECK-NOT:        ReadAccess
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_do_body[i0] -> MemRef_U[0] };
 | 
			
		||||
; CHECK:            Execution Context: {  :  }
 | 
			
		||||
; CHECK-NOT:        ReadAccess
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
; CHECK:      Invariant Accesses: {
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_do_body[i0] -> MemRef_U[0] };
 | 
			
		||||
; CHECK-NEXT:         Execution Context: {  :  }
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK:      Stmt_do_body
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                { Stmt_do_body[i0] : i0 <= 100 and i0 >= 0 };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                { Stmt_do_body[i0] -> [i0] };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_do_body[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_do_body
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_do_body[i0] : i0 <= 100 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_do_body[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_do_body[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CODEGEN: entry:
 | 
			
		||||
; CODEGEN:   %U.f.preload.s2a = alloca float
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,19 +1,19 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK:         Invariant Accesses: {
 | 
			
		||||
; CHECK-NEXT:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [LB, UB] -> { Stmt_for_body[i0] -> MemRef_LBptr[0] };
 | 
			
		||||
; CHECK-NEXT:            Execution Context: [LB, UB] -> {  :  }
 | 
			
		||||
; CHECK-NEXT:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [LB, UB] -> { Stmt_do_cond[i0, i1] -> MemRef_UBptr[0] };
 | 
			
		||||
; CHECK-NEXT:            Execution Context: [LB, UB] -> {  :  }
 | 
			
		||||
; CHECK-NEXT:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [LB, UB] -> { Stmt_if_then[i0, i1] -> MemRef_V[0] };
 | 
			
		||||
; CHECK-NEXT:            Execution Context: [LB, UB] -> {  : (UB >= 1 + LB and UB >= 6) or LB >= 6 }
 | 
			
		||||
; CHECK-NEXT:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                [LB, UB] -> { Stmt_if_else[i0, i1] -> MemRef_U[0] };
 | 
			
		||||
; CHECK-NEXT:            Execution Context: [LB, UB] -> {  : LB <= 5 }
 | 
			
		||||
; CHECK-NEXT:    }
 | 
			
		||||
; CHECK:      Invariant Accesses: {
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [LB, UB] -> { Stmt_for_body[i0] -> MemRef_LBptr[0] };
 | 
			
		||||
; CHECK-NEXT:         Execution Context: [LB, UB] -> {  :  }
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [LB, UB] -> { Stmt_do_cond[i0, i1] -> MemRef_UBptr[0] };
 | 
			
		||||
; CHECK-NEXT:         Execution Context: [LB, UB] -> {  :  }
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [LB, UB] -> { Stmt_if_then[i0, i1] -> MemRef_V[0] };
 | 
			
		||||
; CHECK-NEXT:         Execution Context: [LB, UB] -> {  : (UB >= 1 + LB and UB >= 6) or LB >= 6 }
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [LB, UB] -> { Stmt_if_else[i0, i1] -> MemRef_U[0] };
 | 
			
		||||
; CHECK-NEXT:         Execution Context: [LB, UB] -> {  : LB <= 5 }
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
;    void f(int *restrict A, int *restrict V, int *restrict U, int *restrict UB,
 | 
			
		||||
;           int *restrict LB) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,31 +1,32 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Invariant Accesses: {
 | 
			
		||||
; CHECK-NEXT:         ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             MemRef_bounds[2]
 | 
			
		||||
; CHECK-NEXT: Execution Context: [bounds2, bounds1, bounds0] -> {  : }
 | 
			
		||||
; CHECK-NEXT:         ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             MemRef_bounds[1]
 | 
			
		||||
; CHECK-NEXT: Execution Context: [bounds2, bounds1, bounds0] -> {  : bounds2 >= 1 }
 | 
			
		||||
; CHECK-NEXT:         ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             MemRef_bounds[0]
 | 
			
		||||
; CHECK-NEXT: Execution Context: [bounds2, bounds1, bounds0] -> {  : bounds1 >= 1 and bounds2 >= 1 }
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bounds2, bounds1, bounds0] -> { Stmt_for_cond[i0] -> MemRef_bounds[2] };
 | 
			
		||||
; CHECK-NEXT:         Execution Context: [bounds2, bounds1, bounds0] -> {  :  }
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bounds2, bounds1, bounds0] -> { Stmt_for_cond_1[i0, i1] -> MemRef_bounds[1] };
 | 
			
		||||
; CHECK-NEXT:         Execution Context: [bounds2, bounds1, bounds0] -> {  : bounds2 >= 1 }
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bounds2, bounds1, bounds0] -> { Stmt_for_cond_4[i0, i1, i2] -> MemRef_bounds[0] };
 | 
			
		||||
; CHECK-NEXT:         Execution Context: [bounds2, bounds1, bounds0] -> {  : bounds1 >= 1 and bounds2 >= 1 }
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    p0: %bounds2
 | 
			
		||||
; CHECK:    p1: %bounds1
 | 
			
		||||
; CHECK:    p2: %bounds0
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK:      Stmt_for_body_6
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [bounds2, bounds1, bounds0] -> { Stmt_for_body_6[i0, i1, i2] : i0 >= 0 and i0 <= -1 + bounds2 and i1 >= 0 and i1 <= -1 + bounds1 and i2 >= 0 and i2 <= -1 + bounds0 };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [bounds2, bounds1, bounds0] -> { Stmt_for_body_6[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                [bounds2, bounds1, bounds0] -> { Stmt_for_body_6[i0, i1, i2] -> MemRef_data[i0, i1, i2] };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                [bounds2, bounds1, bounds0] -> { Stmt_for_body_6[i0, i1, i2] -> MemRef_data[i0, i1, i2] };
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
; CHECK:      p0: %bounds2
 | 
			
		||||
; CHECK-NEXT: p1: %bounds1
 | 
			
		||||
; CHECK-NEXT: p2: %bounds0
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body_6
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bounds2, bounds1, bounds0] -> { Stmt_for_body_6[i0, i1, i2] : i0 >= 0 and i0 <= -1 + bounds2 and i1 >= 0 and i1 <= -1 + bounds1 and i2 >= 0 and i2 <= -1 + bounds0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bounds2, bounds1, bounds0] -> { Stmt_for_body_6[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bounds2, bounds1, bounds0] -> { Stmt_for_body_6[i0, i1, i2] -> MemRef_data[i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bounds2, bounds1, bounds0] -> { Stmt_for_body_6[i0, i1, i2] -> MemRef_data[i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
;    int bounds[3];
 | 
			
		||||
;    double data[1024][1024][1024];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,24 +6,25 @@
 | 
			
		|||
; one, e.g., here the universal set.
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Invariant Accesses: {
 | 
			
		||||
; CHECK-NEXT:         ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             MemRef_bounds[0]
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bounds0l0] -> { Stmt_for_cond_4[i0, i1, i2] -> MemRef_bounds[0] };
 | 
			
		||||
; CHECK-NEXT:         Execution Context: [bounds0l0] -> {  :  }
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      p0: %bounds0l0
 | 
			
		||||
; CHECK-NOT:  p1
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK:        Stmt_for_body_6
 | 
			
		||||
; CHECK:              Domain :=
 | 
			
		||||
; CHECK:                  [bounds0l0] -> { Stmt_for_body_6[i0, i1, i2] : i0 >= 0 and i0 <= -1 + bounds0l0 and i1 >= 0 and i1 <= -1 + bounds0l0 and i2 >= 0 and i2 <= -1 + bounds0l0 };
 | 
			
		||||
; CHECK:              Schedule :=
 | 
			
		||||
; CHECK:                  [bounds0l0] -> { Stmt_for_body_6[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK:              ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                  [bounds0l0] -> { Stmt_for_body_6[i0, i1, i2] -> MemRef_data[i0, i1, i2] };
 | 
			
		||||
; CHECK:              MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                  [bounds0l0] -> { Stmt_for_body_6[i0, i1, i2] -> MemRef_data[i0, i1, i2] };
 | 
			
		||||
; CHECK:      }
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body_6
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bounds0l0] -> { Stmt_for_body_6[i0, i1, i2] : i0 >= 0 and i0 <= -1 + bounds0l0 and i1 >= 0 and i1 <= -1 + bounds0l0 and i2 >= 0 and i2 <= -1 + bounds0l0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bounds0l0] -> { Stmt_for_body_6[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bounds0l0] -> { Stmt_for_body_6[i0, i1, i2] -> MemRef_data[i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bounds0l0] -> { Stmt_for_body_6[i0, i1, i2] -> MemRef_data[i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
;    int bounds[1];
 | 
			
		||||
;    double data[1024][1024][1024];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,25 +6,26 @@
 | 
			
		|||
; one, e.g., here the universal set.
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Invariant Accesses: {
 | 
			
		||||
; CHECK-NEXT:         ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             MemRef_bounds[0]
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bounds0l0, p] -> { Stmt_for_cond_4[i0, i1, i2] -> MemRef_bounds[0] };
 | 
			
		||||
; CHECK-NEXT:         Execution Context: [bounds0l0, p] -> {  :  }
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      p0: %bounds0l0
 | 
			
		||||
; CHECK:      p1: %p
 | 
			
		||||
; CHECK-NOT:  p2:
 | 
			
		||||
; CHECK-NEXT: p1: %p
 | 
			
		||||
; CHECK-NOT:  p2
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK:        Stmt_for_body_6
 | 
			
		||||
; CHECK:              Domain :=
 | 
			
		||||
; CHECK:                  [bounds0l0, p] -> { Stmt_for_body_6[i0, i1, i2] : p = 0 and i0 >= 0 and i0 <= -1 + bounds0l0 and i1 >= 0 and i1 <= -1 + bounds0l0 and i2 >= 0 and i2 <= -1 + bounds0l0 };
 | 
			
		||||
; CHECK:              Schedule :=
 | 
			
		||||
; CHECK:                  [bounds0l0, p] -> { Stmt_for_body_6[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK:              ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                  [bounds0l0, p] -> { Stmt_for_body_6[i0, i1, i2] -> MemRef_data[i0, i1, i2] };
 | 
			
		||||
; CHECK:              MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                  [bounds0l0, p] -> { Stmt_for_body_6[i0, i1, i2] -> MemRef_data[i0, i1, i2] };
 | 
			
		||||
; CHECK:      }
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body_6
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [bounds0l0, p] -> { Stmt_for_body_6[i0, i1, i2] : p = 0 and i0 >= 0 and i0 <= -1 + bounds0l0 and i1 >= 0 and i1 <= -1 + bounds0l0 and i2 >= 0 and i2 <= -1 + bounds0l0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [bounds0l0, p] -> { Stmt_for_body_6[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bounds0l0, p] -> { Stmt_for_body_6[i0, i1, i2] -> MemRef_data[i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [bounds0l0, p] -> { Stmt_for_body_6[i0, i1, i2] -> MemRef_data[i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
;    int bounds[1];
 | 
			
		||||
;    double data[1024][1024][1024];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,22 +3,24 @@
 | 
			
		|||
; Test comes from a bug (15771) or better a feature request. It was not allowed
 | 
			
		||||
; in Polly in the old domain generation as ScalarEvolution cannot figure out the
 | 
			
		||||
; loop bounds. However, the new domain generation will detect the SCoP.
 | 
			
		||||
 | 
			
		||||
; CHECK:      Context:
 | 
			
		||||
; CHECK-NEXT: [n] -> {  : n <= 2147483647 and n >= -2147483648 }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Context:
 | 
			
		||||
; CHECK:    [n] -> {  : n <= 2147483647 and n >= -2147483648 }
 | 
			
		||||
; CHECK:    p0: %n
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK:      Stmt_for_next
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [n] -> { Stmt_for_next[i0] : i0 >= 0 and 2i0 <= -3 + n };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [n] -> { Stmt_for_next[i0] -> [i0] };
 | 
			
		||||
; CHECK:            ReadAccess := 
 | 
			
		||||
; CHECK:                [n] -> { Stmt_for_next[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:            WriteAccess := 
 | 
			
		||||
; CHECK:                [n] -> { Stmt_for_next[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
; CHECK:      p0: %n
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_next
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_for_next[i0] : i0 >= 0 and 2i0 <= -3 + n };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_for_next[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_for_next[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_for_next[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
@A = common global [100 x i32] zeroinitializer, align 16
 | 
			
		||||
 | 
			
		||||
define void @foo(i32 %n) #0 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,43 +8,43 @@ target triple = "x86_64-unknown-linux-gnu"
 | 
			
		|||
; The assumed context of this test case is still very large and should be
 | 
			
		||||
; reduced.
 | 
			
		||||
 | 
			
		||||
; CHECK: Assumed Context:
 | 
			
		||||
; CHECK: {{.*}} or {{.*}} or {{.*}} or {{.*}} or {{.*}}
 | 
			
		||||
 | 
			
		||||
; This test case contains a long sequence of branch instructions together with
 | 
			
		||||
; function calls that are considered 'error blocks'. We verify that the
 | 
			
		||||
; iteration spaces are not overly complicated.
 | 
			
		||||
 | 
			
		||||
; CHECK: Statements {
 | 
			
		||||
; CHECK:   Stmt_bb15
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb15[] };
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb15[] -> [0] };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb15[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK:   Stmt_bb19
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb19[] : tmp17 <= -1 or tmp17 >= 1 };
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb19[] -> [1] : tmp17 <= -1 or tmp17 >= 1 };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb19[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK:   Stmt_bb24
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb24[] };
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb24[] -> [2] };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb24[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK:   Stmt_bb29
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb29[] : tmp27 = 3 };
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb29[] -> [3] };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb29[] -> MemRef_A[0] };
 | 
			
		||||
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [tmp17, tmp21, tmp27, tmp31] -> {  : (tmp17 = 0 and tmp27 >= 4) or (tmp17 = 0 and tmp27 <= 2) or (tmp21 = 0 and tmp17 <= -1 and tmp27 >= 4) or (tmp21 = 0 and tmp17 <= -1 and tmp27 <= 2) or (tmp21 = 0 and tmp17 >= 1 and tmp27 >= 4) or (tmp21 = 0 and tmp17 >= 1 and tmp27 <= 2) or (tmp17 = 0 and tmp27 = 3 and tmp31 >= 144) or (tmp21 = 0 and tmp27 = 3 and tmp17 <= -1 and tmp31 >= 144) or (tmp21 = 0 and tmp27 = 3 and tmp17 >= 1 and tmp31 >= 144) }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb15
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb15[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb15[] -> [0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb15[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb19
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb19[] : tmp17 <= -1 or tmp17 >= 1 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb19[] -> [1] : tmp17 <= -1 or tmp17 >= 1 };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb19[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb24
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb24[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb24[] -> [2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb24[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb29
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb29[] : tmp27 = 3 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb29[] -> [3] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb29[] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
@global = external global [300 x i8], align 16
 | 
			
		||||
@global1 = external global %struct.hoge*, align 8
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,24 +50,16 @@ return:                                           ; preds = %bb.nph8, %bb3, %ent
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; CHECK:  p0: %N
 | 
			
		||||
; CHECK:  p1: %M
 | 
			
		||||
; CHECK:  Statements {
 | 
			
		||||
; CHECK:    Stmt_bb1
 | 
			
		||||
; CHECK:          Domain :=
 | 
			
		||||
; CHECK:              [N, M] -> { Stmt_bb1[i0, i1] :
 | 
			
		||||
; CHECK-DAG:             i0 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i0 <= 2 + 4N + 7M
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 <= 1 + 5N
 | 
			
		||||
; CHECK:               }
 | 
			
		||||
; CHECK:          Schedule :=
 | 
			
		||||
; CHECK:              [N, M] -> { Stmt_bb1[i0, i1] -> [i0, i1] };
 | 
			
		||||
; CHECK-NOT: 128i1
 | 
			
		||||
; CHECK:          MustWriteAccess := [Reduction Type: NONE]
 | 
			
		||||
; CHECK:              [N, M] -> { Stmt_bb1[i0, i1] -> MemRef_a[i1, i0] };
 | 
			
		||||
; CHECK-NOT: 128i1
 | 
			
		||||
; CHECK:  }
 | 
			
		||||
 | 
			
		||||
; CHECK:      p0: %N
 | 
			
		||||
; CHECK-NEXT: p1: %M
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb1
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, M] -> { Stmt_bb1[i0, i1] : i0 >= 0 and i0 <= 2 + 4N + 7M and i1 >= 0 and i1 <= 1 + 5N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, M] -> { Stmt_bb1[i0, i1] -> [i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N, M] -> { Stmt_bb1[i0, i1] -> MemRef_a[i1, i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,26 +49,16 @@ return:                                           ; preds = %bb3, %entry
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; CHECK: p0: %N
 | 
			
		||||
; CHECK: p1: %M
 | 
			
		||||
; CHECK: Statements {
 | 
			
		||||
; CHECK:   Stmt_bb1
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             [N, M] -> { Stmt_bb1[i0, i1] :
 | 
			
		||||
; CHECK-DAG:             i0 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i0 <= 2 + 4N + 7M
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 <= 1 + 5N - i0
 | 
			
		||||
; CHECK-DAG:                     Stmt_bb1[0, i1] :
 | 
			
		||||
; CHECK-DAG:             7M <= -3 - 4N
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 <= 1 + 5N
 | 
			
		||||
; CHECK:               }
 | 
			
		||||
; CHECK:         MustWriteAccess := [Reduction Type: NONE]
 | 
			
		||||
; CHECK:             [N, M] -> { Stmt_bb1[i0, i1] -> MemRef_a[i1, 129i0] };
 | 
			
		||||
; CHECK: }
 | 
			
		||||
 | 
			
		||||
; CHECK:      p0: %N
 | 
			
		||||
; CHECK-NEXT: p1: %M
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb1
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, M] -> { Stmt_bb1[i0, i1] : i0 >= 0 and i0 <= 2 + 4N + 7M and i1 >= 0 and i1 <= 1 + 5N - i0; Stmt_bb1[0, i1] : 7M <= -3 - 4N and i1 >= 0 and i1 <= 1 + 5N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, M] -> { Stmt_bb1[i0, i1] -> [i0, i1] : i0 <= 2 + 4N + 7M; Stmt_bb1[0, i1] -> [0, i1] : 7M <= -3 - 4N };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N, M] -> { Stmt_bb1[i0, i1] -> MemRef_a[i1, 129i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,22 +60,16 @@ return:                                           ; preds = %bb3, %entry
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; CHECK: p0: %N
 | 
			
		||||
; CHECK: p1: %M
 | 
			
		||||
; CHECK: Statements {
 | 
			
		||||
; CHECK:   Stmt_bb1
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             [N, M] -> { Stmt_bb1[i0, i1] :
 | 
			
		||||
; CHECK-DAG:                  i0 >= 0
 | 
			
		||||
; CHECK-DAG:                and
 | 
			
		||||
; CHECK-DAG:                  i0 <= 2 + 4N + 7M
 | 
			
		||||
; CHECK-DAG:                and
 | 
			
		||||
; CHECK-DAG:                  i1 >= 0
 | 
			
		||||
; CHECK-DAG:                and
 | 
			
		||||
; CHECK-DAG:                  i1 <= 10 + 5N - 6M - 4i0
 | 
			
		||||
; CHECK-DAG:                }
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             [N, M] -> { Stmt_bb1[i0, i1] -> [i0, i1]
 | 
			
		||||
; CHECK:         MustWriteAccess := [Reduction Type: NONE]
 | 
			
		||||
; CHECK:             [N, M] -> { Stmt_bb1[i0, i1] -> MemRef_a[-9 + 6M + i1, 897i0] 
 | 
			
		||||
; CHECK: }
 | 
			
		||||
 | 
			
		||||
; CHECK:      p0: %N
 | 
			
		||||
; CHECK-NEXT: p1: %M
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb1
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, M] -> { Stmt_bb1[i0, i1] : i0 >= 0 and i0 <= 2 + 4N + 7M and i1 <= 10 + 5N - 6M - 4i0 and i1 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, M] -> { Stmt_bb1[i0, i1] -> [i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N, M] -> { Stmt_bb1[i0, i1] -> MemRef_a[-9 + 6M + i1, 897i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,24 +45,25 @@ bb2:                                              ; preds = %bb, %entry
 | 
			
		|||
  ret i64 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; CHECK:     Statements {
 | 
			
		||||
; CHECK:     	Stmt_bb
 | 
			
		||||
; CHECK:             Domain :=
 | 
			
		||||
; CHECK:                 [n] -> { Stmt_bb[i0] : i0 >= 0 and i0 <= -2 + n };
 | 
			
		||||
; CHECK:             Schedule :=
 | 
			
		||||
; CHECK:                 [n] -> { Stmt_bb[i0] -> [i0] };
 | 
			
		||||
; CHECK:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                 [n] -> { Stmt_bb[i0] -> MemRef_1__phi[] };
 | 
			
		||||
; CHECK:             ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                 [n] -> { Stmt_bb[i0] -> MemRef_1__phi[] };
 | 
			
		||||
; CHECK:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                 [n] -> { Stmt_bb[i0] -> MemRef_k_05__phi[] };
 | 
			
		||||
; CHECK:             ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                 [n] -> { Stmt_bb[i0] -> MemRef_k_05__phi[] };
 | 
			
		||||
; CHECK:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                 [n] -> { Stmt_bb[i0] -> MemRef_a[1 + i0] };
 | 
			
		||||
; CHECK:             ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                 [n] -> { Stmt_bb[i0] -> MemRef_a[2 + 2i0] };
 | 
			
		||||
; CHECK:             ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                 [n] -> { Stmt_bb[i0] -> MemRef_a[4 + i0] };
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb[i0] : i0 >= 0 and i0 <= -2 + n };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb[i0] -> MemRef_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb[i0] -> MemRef_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb[i0] -> MemRef_k_05__phi[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb[i0] -> MemRef_k_05__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb[i0] -> MemRef_a[1 + i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb[i0] -> MemRef_a[2 + 2i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_bb[i0] -> MemRef_a[4 + i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,131 +19,132 @@
 | 
			
		|||
; and scalar data-dependences due to x being passed along as SSA value or PHI
 | 
			
		||||
; node.
 | 
			
		||||
 | 
			
		||||
; CHECK: Stmt_bb5
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb5[i0] : i0 <= 100 and i0 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb5[i0] -> [i0, 0, 0, 0, 0, 0] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb5[i0] -> MemRef_x_0__phi[] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb5[i0] -> MemRef_x_0[] };
 | 
			
		||||
; CHECK: Stmt_bb6
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb6[i0] : i0 <= 99 and i0 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb6[i0] -> [i0, 1, 0, 0, 0, 0] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb6[i0] -> MemRef_x_0[] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb6[i0] -> MemRef_x_1__phi[] };
 | 
			
		||||
; CHECK: Stmt_bb7
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb7[i0, i1] : i0 <= 99 and i0 >= 0 and i1 <= 100 and i1 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb7[i0, i1] -> [i0, 2, i1, 0, 0, 0] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb7[i0, i1] -> MemRef_x_1__phi[] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb7[i0, i1] -> MemRef_x_1[] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb7[i0, i1] -> MemRef_x_1_lcssa__phi[] };
 | 
			
		||||
; CHECK: Stmt_bb8
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb8[i0, i1] : i1 <= 99 and i0 <= 99 and i0 >= 0 and i1 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb8[i0, i1] -> [i0, 2, i1, 1, 0, 0] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb8[i0, i1] -> MemRef_x_1[] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb8[i0, i1] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK: Stmt_bb9
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb9[i0, i1, i2] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 and i2 <= 100 and i2 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb9[i0, i1, i2] -> [i0, 2, i1, 2, i2, 0] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb9[i0, i1, i2] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb9[i0, i1, i2] -> MemRef_x_2[] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb9[i0, i1, i2] -> MemRef_x_2_lcssa__phi[] };
 | 
			
		||||
; CHECK: Stmt_bb10
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb10[i0, i1, i2] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 and i2 <= 99 and i2 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb10[i0, i1, i2] -> [i0, 2, i1, 2, i2, 1] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb10[i0, i1, i2] -> MemRef_x_2[] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb10[i0, i1, i2] -> MemRef_x_3__phi[] };
 | 
			
		||||
; CHECK: Stmt_bb11
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb11[i0, i1, 0] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb11[i0, i1, i2] -> [i0, 2, i1, 2, 0, 2] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb11[i0, i1, i2] -> MemRef_x_3__phi[] };
 | 
			
		||||
; CHECK: Stmt_bb12
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb12[i0, i1, i2] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 and i2 <= 99 and i2 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb12[i0, i1, i2] -> [i0, 2, i1, 2, i2, 3] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb12[i0, i1, i2] -> MemRef_x_3__phi[] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb12[i0, i1, i2] -> MemRef_x_3[] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:           { Stmt_bb12[i0, i1, i2] -> MemRef_a[i0, i1] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:           { Stmt_bb12[i0, i1, i2] -> MemRef_a[i0, i1] };
 | 
			
		||||
; CHECK: Stmt_bb16
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb16[i0, i1, i2] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 and i2 <= 99 and i2 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb16[i0, i1, i2] -> [i0, 2, i1, 2, i2, 4] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb16[i0, i1, i2] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb16[i0, i1, i2] -> MemRef_x_3[] };
 | 
			
		||||
; CHECK: Stmt_bb19
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb19[i0, i1] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb19[i0, i1] -> [i0, 2, i1, 3, 0, 0] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb19[i0, i1] -> MemRef_x_2_lcssa[] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb19[i0, i1] -> MemRef_x_2_lcssa__phi[] };
 | 
			
		||||
; CHECK: Stmt_bb20
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb20[i0, i1] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb20[i0, i1] -> [i0, 2, i1, 4, 0, 0] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb20[i0, i1] -> MemRef_x_2_lcssa[] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb20[i0, i1] -> MemRef_x_1__phi[] };
 | 
			
		||||
; CHECK: Stmt_bb21
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb21[i0] : i0 <= 99 and i0 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb21[i0] -> [i0, 3, 0, 0, 0, 0] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb21[i0] -> MemRef_x_1_lcssa[] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb21[i0] -> MemRef_x_1_lcssa__phi[] };
 | 
			
		||||
; CHECK: Stmt_bb22
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb22[i0] : i0 <= 99 and i0 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb22[i0] -> [i0, 4, 0, 0, 0, 0] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb22[i0] -> MemRef_x_1_lcssa[] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb22[i0] -> MemRef_x_0__phi[] };
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb5
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb5[i0] : i0 <= 100 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb5[i0] -> [i0, 0, 0, 0, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb5[i0] -> MemRef_x_0__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb5[i0] -> MemRef_x_0[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb6
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb6[i0] : i0 <= 99 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb6[i0] -> [i0, 1, 0, 0, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb6[i0] -> MemRef_x_0[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb6[i0] -> MemRef_x_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb7
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] : i0 <= 99 and i0 >= 0 and i1 <= 100 and i1 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] -> [i0, 2, i1, 0, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] -> MemRef_x_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] -> MemRef_x_1[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] -> MemRef_x_1_lcssa__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb8
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb8[i0, i1] : i1 <= 99 and i0 <= 99 and i0 >= 0 and i1 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb8[i0, i1] -> [i0, 2, i1, 1, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb8[i0, i1] -> MemRef_x_1[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb8[i0, i1] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb9
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb9[i0, i1, i2] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 and i2 <= 100 and i2 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb9[i0, i1, i2] -> [i0, 2, i1, 2, i2, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb9[i0, i1, i2] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb9[i0, i1, i2] -> MemRef_x_2[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb9[i0, i1, i2] -> MemRef_x_2_lcssa__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb10
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb10[i0, i1, i2] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 and i2 <= 99 and i2 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb10[i0, i1, i2] -> [i0, 2, i1, 2, i2, 1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb10[i0, i1, i2] -> MemRef_x_2[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb10[i0, i1, i2] -> MemRef_x_3__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb11
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb11[i0, i1, 0] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb11[i0, i1, i2] -> [i0, 2, i1, 2, 0, 2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb11[i0, i1, i2] -> MemRef_x_3__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb12
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb12[i0, i1, i2] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 and i2 <= 99 and i2 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb12[i0, i1, i2] -> [i0, 2, i1, 2, i2, 3] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb12[i0, i1, i2] -> MemRef_x_3__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb12[i0, i1, i2] -> MemRef_x_3[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb12[i0, i1, i2] -> MemRef_a[i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb12[i0, i1, i2] -> MemRef_a[i0, i1] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb16
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb16[i0, i1, i2] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 and i2 <= 99 and i2 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb16[i0, i1, i2] -> [i0, 2, i1, 2, i2, 4] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb16[i0, i1, i2] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb16[i0, i1, i2] -> MemRef_x_3[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb19
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb19[i0, i1] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb19[i0, i1] -> [i0, 2, i1, 3, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb19[i0, i1] -> MemRef_x_2_lcssa[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb19[i0, i1] -> MemRef_x_2_lcssa__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb20
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb20[i0, i1] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb20[i0, i1] -> [i0, 2, i1, 4, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb20[i0, i1] -> MemRef_x_2_lcssa[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb20[i0, i1] -> MemRef_x_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb21
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb21[i0] : i0 <= 99 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb21[i0] -> [i0, 3, 0, 0, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb21[i0] -> MemRef_x_1_lcssa[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb21[i0] -> MemRef_x_1_lcssa__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb22
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb22[i0] : i0 <= 99 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb22[i0] -> [i0, 4, 0, 0, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb22[i0] -> MemRef_x_1_lcssa[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb22[i0] -> MemRef_x_0__phi[] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
;
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @f([100 x float]* %a) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,27 +9,21 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 | 
			
		|||
;       A[i+p][j] = 1.0;
 | 
			
		||||
; }
 | 
			
		||||
 | 
			
		||||
; CHECK:  Assumed Context:
 | 
			
		||||
; CHECK:  [m, p] -> {  : p <= 9223372036854775708 }
 | 
			
		||||
; CHECK:  p0: %m
 | 
			
		||||
; CHECK:  p1: %p
 | 
			
		||||
; CHECK:  Statements {
 | 
			
		||||
; CHECK:    Stmt_for_j
 | 
			
		||||
; CHECK:          Domain :=
 | 
			
		||||
; CHECK:              [m, p] -> { Stmt_for_j[i0, i1] :
 | 
			
		||||
; CHECK-DAG:             i0 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i0 <= 99
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 <= -1 + m
 | 
			
		||||
; CHECK:              }
 | 
			
		||||
; CHECK:          Schedule :=
 | 
			
		||||
; CHECK:              [m, p] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
 | 
			
		||||
; CHECK:          MustWriteAccess := [Reduction Type: NONE]
 | 
			
		||||
; CHECK:              [m, p] -> { Stmt_for_j[i0, i1] -> MemRef_A[p + i0, i1] };
 | 
			
		||||
; CHECK:  }
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [m, p] -> {  :  }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      p0: %m
 | 
			
		||||
; CHECK-NEXT: p1: %p
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_j
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [m, p] -> { Stmt_for_j[i0, i1] : i0 <= 99 and i0 >= 0 and i1 >= 0 and i1 <= -1 + m };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [m, p] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [m, p] -> { Stmt_for_j[i0, i1] -> MemRef_A[p + i0, i1] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
define void @foo(i64 %n, i64 %m, i64 %p, double* %A) {
 | 
			
		||||
entry:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,25 +8,20 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 | 
			
		|||
;     for (long j = 0; j < 150; j++)
 | 
			
		||||
;       A[i][j] = 1.0;
 | 
			
		||||
; }
 | 
			
		||||
; CHECK: Assumed Context:
 | 
			
		||||
; CHECK: [m] -> {  : m >= 150 }
 | 
			
		||||
; CHECK: p0: %m
 | 
			
		||||
; CHECK: Statements {
 | 
			
		||||
; CHECK:   Stmt_for_j
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             [m] -> { Stmt_for_j[i0, i1]
 | 
			
		||||
; CHECK-DAG:             i0 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i0 <= 99
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 <= 149
 | 
			
		||||
; CHECK:              }
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             [m] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
 | 
			
		||||
; CHECK:         MustWriteAccess := [Reduction Type: NONE]
 | 
			
		||||
; CHECK:             [m] -> { Stmt_for_j[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [m] -> {  : m >= 150 }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      p0: %m
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_j
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [m] -> { Stmt_for_j[i0, i1] : i0 <= 99 and i0 >= 0 and i1 <= 149 and i1 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [m] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [m] -> { Stmt_for_j[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
define void @foo(i64 %n, i64 %m, double* %A) {
 | 
			
		||||
entry:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,34 +9,21 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 | 
			
		|||
;         A[i][j][k] = 1.0;
 | 
			
		||||
; }
 | 
			
		||||
 | 
			
		||||
; CHECK:   Assumed Context:
 | 
			
		||||
; CHECK:   [m, o] -> {  :
 | 
			
		||||
; CHECK-DAG:               m >= 150
 | 
			
		||||
; CHECK-DAG:               and
 | 
			
		||||
; CHECK-DAG:               o >= 200
 | 
			
		||||
; CHECK:             }
 | 
			
		||||
; CHECK:   p0: %m
 | 
			
		||||
; CHECK:   p1: %o
 | 
			
		||||
; CHECK:   Statements {
 | 
			
		||||
; CHECK:     Stmt_for_k
 | 
			
		||||
; CHECK:           Domain :=
 | 
			
		||||
; CHECK:               [m, o] -> { Stmt_for_k[i0, i1, i2] :
 | 
			
		||||
; CHECK-DAG:             i0 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i0 <= 99
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 <= 149
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i2 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i2 <= 199
 | 
			
		||||
; CHECK:              }
 | 
			
		||||
; CHECK:           Schedule :=
 | 
			
		||||
; CHECK:               [m, o] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK:           MustWriteAccess := [Reduction Type: NONE]
 | 
			
		||||
; CHECK:               [m, o] -> { Stmt_for_k[i0, i1, i2] -> MemRef_A[i0, i1, i2] };
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [m, o] -> {  : m >= 150 and o >= 200 }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      p0: %m
 | 
			
		||||
; CHECK-NEXT: p1: %o
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_k
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [m, o] -> { Stmt_for_k[i0, i1, i2] : i0 <= 99 and i0 >= 0 and i1 <= 149 and i1 >= 0 and i2 <= 199 and i2 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [m, o] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [m, o] -> { Stmt_for_k[i0, i1, i2] -> MemRef_A[i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
define void @foo(i64 %n, i64 %m, i64 %o, double* %A) {
 | 
			
		||||
entry:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,36 +14,6 @@
 | 
			
		|||
;          A[i][j] += i + j;
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK: Stmt_bb7
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb7[i0, i1] : i0 <= 399 and i0 >= 0 and i1 <= 399 and i1 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb7[i0, i1] -> [0, i0, i1] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:           { Stmt_bb7[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:           { Stmt_bb7[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
; CHECK: Stmt_bb17
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb17[] };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb17[] -> [1, 0, 0] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:           { Stmt_bb17[] -> MemRef_A[100, 100] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:           { Stmt_bb17[] -> MemRef_A[0, 0] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:           { Stmt_bb17[] -> MemRef_A[0, 0] };
 | 
			
		||||
; CHECK: Stmt_bb26
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb26[i0, i1] : i0 <= 399 and i0 >= 0 and i1 <= 399 and i1 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb26[i0, i1] -> [2, i0, i1] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:           { Stmt_bb26[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:           { Stmt_bb26[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
 | 
			
		||||
;    void first_lower_dimensional(float A[][N], float B[][N]) {
 | 
			
		||||
;      for (long i = 0; i < N; i++)
 | 
			
		||||
;        for (long j = 0; j < N; j++)
 | 
			
		||||
| 
						 | 
				
			
			@ -56,37 +26,69 @@
 | 
			
		|||
;          A[i][j] += i + j;
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK: Statements {
 | 
			
		||||
; CHECK:   Stmt_bb7
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             { Stmt_bb7[i0, i1] : i0 <= 399 and i0 >= 0 and i1 <= 399 and i1 >= 0 };
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             { Stmt_bb7[i0, i1] -> [0, i0, i1] };
 | 
			
		||||
; CHECK:         ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             { Stmt_bb7[i0, i1]  -> MemRef_B[i0, i1] };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             { Stmt_bb7[i0, i1] -> MemRef_B[i0, i1] };
 | 
			
		||||
; CHECK:   Stmt_bb17
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             { Stmt_bb17[] };
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             { Stmt_bb17[] -> [1, 0, 0] };
 | 
			
		||||
; CHECK:         ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             { Stmt_bb17[] -> MemRef_B[100, 100] };
 | 
			
		||||
; CHECK:         ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             { Stmt_bb17[] -> MemRef_A[0, 0] };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             { Stmt_bb17[] -> MemRef_A[0, 0] };
 | 
			
		||||
; CHECK:   Stmt_bb26
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             { Stmt_bb26[i0, i1] : i0 <= 399 and i0 >= 0 and i1 <= 399 and i1 >= 0 };
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             { Stmt_bb26[i0, i1] -> [2, i0, i1] };
 | 
			
		||||
; CHECK:         ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             { Stmt_bb26[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             { Stmt_bb26[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb7
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] : i0 <= 399 and i0 >= 0 and i1 <= 399 and i1 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] -> [0, i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb17
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb17[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb17[] -> [1, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb17[] -> MemRef_A[100, 100] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb17[] -> MemRef_A[0, 0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb17[] -> MemRef_A[0, 0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb26
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb26[i0, i1] : i0 <= 399 and i0 >= 0 and i1 <= 399 and i1 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb26[i0, i1] -> [2, i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb26[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb26[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb7
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] : i0 <= 399 and i0 >= 0 and i1 <= 399 and i1 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] -> [0, i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] -> MemRef_B[i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb7[i0, i1] -> MemRef_B[i0, i1] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb17
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb17[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb17[] -> [1, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb17[] -> MemRef_B[100, 100] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb17[] -> MemRef_A[0, 0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb17[] -> MemRef_A[0, 0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb26
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb26[i0, i1] : i0 <= 399 and i0 >= 0 and i1 <= 399 and i1 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb26[i0, i1] -> [2, i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb26[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb26[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +1,34 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
 | 
			
		||||
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"
 | 
			
		||||
 | 
			
		||||
; CHECK: ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:   [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> MemRef_tmp173[o0, 1 + i1, 1 + i2] : exists (e0 = floor((-i0 + o0)/3): 3e0 = -i0 + o0 and o0 <= 2 and o0 >= 0) };
 | 
			
		||||
; CHECK: ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:   [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> MemRef_tmp173[o0, 1 + i1, 1 + i2] : exists (e0 = floor((-2 - i0 + o0)/3): 3e0 = -2 - i0 + o0 and o0 <= 2 and o0 >= 0) };
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb188
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb188[i0] : i0 >= 0 and i0 <= -3 + tmp183 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb188[i0] -> [i0, 0, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb188[i0] -> MemRef_tmp192[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb188[i0] -> MemRef_tmp194[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb203
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] : i0 >= 0 and i0 <= -3 + tmp183 and i1 >= 0 and i1 <= -3 + tmp180 and i2 >= 0 and i2 <= -3 + tmp177 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> [i0, 1, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> MemRef_tmp192[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> MemRef_tmp194[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> MemRef_tmp173[o0, 1 + i1, 1 + i2] : exists (e0 = floor((-i0 + o0)/3): 3e0 = -i0 + o0 and o0 <= 2 and o0 >= 0) };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> MemRef_tmp173[o0, 1 + i1, 1 + i2] : exists (e0 = floor((-2 - i0 + o0)/3): 3e0 = -2 - i0 + o0 and o0 <= 2 and o0 >= 0) };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> MemRef_arg56[1 + i0, 1 + i1, 1 + i2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> MemRef_arg55[1 + i0, 1 + i1, 1 + i2] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
define void @pluto(i32* noalias %arg, [0 x i32]* noalias %arg2, [0 x i32]* noalias %arg3, [0 x i32]* noalias %arg4, [0 x i32]* noalias %arg5, [0 x i32]* noalias %arg6, [0 x i32]* noalias %arg7, [0 x i32]* noalias %arg8, [0 x i32]* noalias %arg9, double* noalias %arg10, double* noalias %arg11, [0 x double]* noalias %arg12, [0 x double]* noalias %arg13, [0 x i32]* noalias %arg14, i32* noalias %arg15, [0 x i32]* noalias %arg16, i32* noalias %arg17, i32* noalias %arg18, i32* noalias %arg19, i32* noalias %arg20, i32* noalias %arg21, i32* noalias %arg22, i32* noalias %arg23, i32* noalias %arg24, i32* noalias %arg25, i32* noalias %arg26, i32* noalias %arg27, [0 x double]* noalias %arg28, [0 x double]* noalias %arg29, [0 x double]* noalias %arg30, [0 x double]* noalias %arg31, [0 x double]* noalias %arg32, [0 x double]* noalias %arg33, [0 x double]* noalias %arg34, [0 x double]* noalias %arg35, [0 x double]* noalias %arg36, [0 x double]* noalias %arg37, [0 x double]* noalias %arg38, [0 x double]* noalias %arg39, [0 x double]* noalias %arg40, [0 x double]* noalias %arg41, [0 x double]* noalias %arg42, [0 x double]* noalias %arg43, [0 x double]* noalias %arg44, [0 x double]* noalias %arg45, [0 x double]* noalias %arg46, [0 x double]* noalias %arg47, [0 x double]* noalias %arg48, [0 x double]* noalias %arg49, [0 x double]* noalias %arg50, [0 x double]* noalias %arg51, [0 x double]* noalias %arg52, [0 x double]* noalias %arg53, [0 x double]* noalias %arg54, [0 x double]* noalias %arg55, [0 x double]* noalias %arg56, [0 x double]* noalias %arg57, [0 x double]* noalias %arg58, [0 x double]* noalias %arg59, [0 x double]* noalias %arg60, [0 x double]* noalias %arg61, [0 x double]* noalias %arg62, [0 x double]* noalias %arg63, [0 x double]* noalias %arg64, [0 x double]* noalias %arg65, [0 x double]* noalias %arg66, [0 x double]* noalias %arg67, [0 x double]* noalias %arg68, [0 x double]* noalias %arg69, i32* noalias %arg70, i32* noalias %arg71, i32* noalias %arg72, i32* noalias %arg73, i32* noalias %arg74, i32* noalias %arg75, i32* noalias %arg76, i32* noalias %arg77, i32* noalias %arg78, i32* noalias %arg79, i32* noalias %arg80, i32* noalias %arg81, i32* noalias %arg82, i32* noalias %arg83, i32* noalias %arg84, i32* noalias %arg85, i32* noalias %arg86, i32* noalias %arg87, i32* noalias %arg88, i32* noalias %arg89, i32* noalias %arg90, i32* noalias %arg91, i32* noalias %arg92, i32* noalias %arg93, i32* noalias %arg94, i32* noalias %arg95, i32* noalias %arg96, i32* noalias %arg97, [0 x double]* noalias %arg98, [0 x double]* noalias %arg99, [0 x double]* noalias %arg100, [0 x double]* noalias %arg101, double* noalias %arg102, double* noalias %arg103, double* noalias %arg104, i32* noalias %arg105, double* noalias %arg106, double* noalias %arg107, [0 x double]* noalias %arg108, [0 x double]* noalias %arg109, [0 x double]* noalias %arg110, [0 x double]* noalias %arg111, [0 x double]* noalias %arg112, [0 x double]* noalias %arg113, [0 x double]* noalias %arg114, [0 x double]* noalias %arg115, [0 x double]* noalias %arg116, [0 x double]* noalias %arg117, [0 x double]* noalias %arg118, [0 x double]* noalias %arg119, [0 x double]* noalias %arg120, [0 x double]* noalias %arg121, [0 x double]* noalias %arg122, [0 x double]* noalias %arg123, [0 x double]* noalias %arg124, [0 x double]* noalias %arg125, [0 x double]* noalias %arg126, [0 x double]* noalias %arg127, [0 x double]* noalias %arg128, [0 x double]* noalias %arg129, [0 x double]* noalias %arg130, [0 x double]* noalias %arg131, i32* noalias %arg132, [0 x double]* noalias %arg133, [0 x double]* noalias %arg134, [0 x double]* noalias %arg135) {
 | 
			
		||||
bb:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,32 +9,23 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 | 
			
		|||
;         A[i+3][j-4][k+7] = 1.0;
 | 
			
		||||
; }
 | 
			
		||||
 | 
			
		||||
; CHECK: Assumed Context:
 | 
			
		||||
; CHECK: {  :  }
 | 
			
		||||
 | 
			
		||||
; CHECK: p0: %o
 | 
			
		||||
; CHECK: p1: %m
 | 
			
		||||
; CHECK: p2: %n
 | 
			
		||||
; CHECK-NOT: p3
 | 
			
		||||
 | 
			
		||||
; CHECK: Domain
 | 
			
		||||
; CHECK:   [o, m, n] -> { Stmt_for_k[i0, i1, i2] :
 | 
			
		||||
; CHECK-DAG:             i0 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i0 <= -4 + n
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 <= -5 + m
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i2 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i2 <= -8 + o
 | 
			
		||||
; CHECK:              }
 | 
			
		||||
; CHECK: Schedule
 | 
			
		||||
; CHECK:   [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK: MustWriteAccess
 | 
			
		||||
; CHECK:   [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> MemRef_A[3 + i0, i1, 7 + i2] };
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [o, m, n] -> {  :  }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      p0: %o
 | 
			
		||||
; CHECK-NEXT: p1: %m
 | 
			
		||||
; CHECK-NEXT: p2: %n
 | 
			
		||||
; CHECK-NOT:  p3
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_k
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [o, m, n] -> { Stmt_for_k[i0, i1, i2] : i0 >= 0 and i0 <= -4 + n and i1 >= 0 and i1 <= -5 + m and i2 >= 0 and i2 <= -8 + o };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> MemRef_A[3 + i0, i1, 7 + i2] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
define void @foo(i64 %n, i64 %m, i64 %o, double* %A) {
 | 
			
		||||
entry:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,36 +13,26 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 | 
			
		|||
;    {{{((8 * ((((%m * %p) + %q) * %o) + %r)) + %A),+,(8 * %m * %o)}<%for.i>,+,
 | 
			
		||||
;        (8 * %o)}<%for.j>,+,8}<%for.k>
 | 
			
		||||
 | 
			
		||||
; CHECK: Assumed Context:
 | 
			
		||||
; CHECK: [o, m, n, p, q, r] -> { : (q <= 0 and q >= 1 - m and r <= -1 and r >= 1 - o) or (r = 0 and q <= 0 and q >= -m) or (r = -o and q <= 1 and q >= 1 - m) }
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [o, m, n, p, q, r] -> {  : (q <= 0 and q >= 1 - m and r <= -1 and r >= 1 - o) or (r = 0 and q <= 0 and q >= -m) or (r = -o and q <= 1 and q >= 1 - m) }
 | 
			
		||||
;
 | 
			
		||||
; CHECK: p0: %o
 | 
			
		||||
; CHECK: p1: %m
 | 
			
		||||
; CHECK: p2: %n
 | 
			
		||||
; CHECK: p3: %p
 | 
			
		||||
; CHECK: p4: %q
 | 
			
		||||
; CHECK: p5: %r
 | 
			
		||||
; CHECK-NOT: p6
 | 
			
		||||
; CHECK:      p0: %o
 | 
			
		||||
; CHECK-NEXT: p1: %m
 | 
			
		||||
; CHECK-NEXT: p2: %n
 | 
			
		||||
; CHECK-NEXT: p3: %p
 | 
			
		||||
; CHECK-NEXT: p4: %q
 | 
			
		||||
; CHECK-NEXT: p5: %r
 | 
			
		||||
; CHECK-NOT:  p6
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Domain
 | 
			
		||||
; CHECK:   [o, m, n, p, q, r] -> { Stmt_for_k[i0, i1, i2] :
 | 
			
		||||
; CHECK-DAG:             i0 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i0 <= -1 + n
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 <= -1 + m
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i2 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i2 <= -1 + o
 | 
			
		||||
; CHECK:              }
 | 
			
		||||
; CHECK: Schedule
 | 
			
		||||
; CHECK:   [o, m, n, p, q, r] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK: MustWriteAccess
 | 
			
		||||
; CHECK: [o, m, n, p, q, r] -> { Stmt_for_k[i0, i1, i2] -> MemRef_A[-1 + p + i0, -1 + m + q + i1, o + r + i2] : i1 <= -q and i2 <= -1 - r; Stmt_for_k[i0, i1, i2] -> MemRef_A[p + i0, -1 + q + i1, o + r + i2] : i1 >= 1 - q and i2 <= -1 - r; Stmt_for_k[i0, i1, i2] -> MemRef_A[-1 + p + i0, m + q + i1, r + i2] : i1 <= -1 - q and i2 >= -r; Stmt_for_k[i0, i1, i2] -> MemRef_A[p + i0, q + i1, r + i2] : i1 >= -q and i2 >= -r };
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_k
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [o, m, n, p, q, r] -> { Stmt_for_k[i0, i1, i2] : i0 >= 0 and i0 <= -1 + n and i1 >= 0 and i1 <= -1 + m and i2 >= 0 and i2 <= -1 + o };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [o, m, n, p, q, r] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [o, m, n, p, q, r] -> { Stmt_for_k[i0, i1, i2] -> MemRef_A[-1 + p + i0, -1 + m + q + i1, o + r + i2] : i1 <= -q and i2 <= -1 - r; Stmt_for_k[i0, i1, i2] -> MemRef_A[p + i0, -1 + q + i1, o + r + i2] : i1 >= 1 - q and i2 <= -1 - r; Stmt_for_k[i0, i1, i2] -> MemRef_A[-1 + p + i0, m + q + i1, r + i2] : i1 <= -1 - q and i2 >= -r; Stmt_for_k[i0, i1, i2] -> MemRef_A[p + i0, q + i1, r + i2] : i1 >= -q and i2 >= -r };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
define void @foo(i64 %n, i64 %m, i64 %o, double* %A, i64 %p, i64 %q, i64 %r) {
 | 
			
		||||
entry:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,30 +8,23 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 | 
			
		|||
;         A[i+3][j-4][k+7] = 1.0;
 | 
			
		||||
; }
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Assumed Context:
 | 
			
		||||
; CHECK:   {  :  }
 | 
			
		||||
; CHECK: p0: %o
 | 
			
		||||
; CHECK: p1: %m
 | 
			
		||||
; CHECK: p2: %n
 | 
			
		||||
; CHECK-NOT: p3
 | 
			
		||||
; CHECK: Domain
 | 
			
		||||
; CHECK:   [o, m, n] -> { Stmt_for_k[i0, i1, i2] :
 | 
			
		||||
; CHECK-DAG:             i0 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i0 <= -4 + n
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 <= -5 + m
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i2 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i2 <= -8 + o
 | 
			
		||||
; CHECK:              }
 | 
			
		||||
; CHECK: Schedule
 | 
			
		||||
; CHECK:   [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK: MustWriteAccess
 | 
			
		||||
; CHECK:   [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> MemRef_A[3 + i0, i1, 7 + i2] };
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [o, m, n] -> {  :  }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      p0: %o
 | 
			
		||||
; CHECK-NEXT: p1: %m
 | 
			
		||||
; CHECK-NEXT: p2: %n
 | 
			
		||||
; CHECK-NOT:  p3
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_k
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [o, m, n] -> { Stmt_for_k[i0, i1, i2] : i0 >= 0 and i0 <= -4 + n and i1 >= 0 and i1 <= -5 + m and i2 >= 0 and i2 <= -8 + o };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> MemRef_A[3 + i0, i1, 7 + i2] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
define void @foo(i64 %n, i64 %m, i64 %o, double* %A) {
 | 
			
		||||
entry:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,26 +9,22 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 | 
			
		|||
;       A[i][j] = 1.0;
 | 
			
		||||
; }
 | 
			
		||||
 | 
			
		||||
; CHECK: Assumed Context:
 | 
			
		||||
; CHECK:   [m, n] -> {  :  }
 | 
			
		||||
; CHECK: p0: %m
 | 
			
		||||
; CHECK: p1: %n
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [m, n] -> {  :  }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      p0: %m
 | 
			
		||||
; CHECK-NEXT: p1: %n
 | 
			
		||||
; CHECK-NOT: p3
 | 
			
		||||
 | 
			
		||||
; CHECK: Domain
 | 
			
		||||
; CHECK:   [m, n] -> { Stmt_for_j[i0, i1] :
 | 
			
		||||
; CHECK-DAG:             i0 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i0 <= -1 + n
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 <= -1 + m
 | 
			
		||||
; CHECK:              }
 | 
			
		||||
; CHECK: Schedule
 | 
			
		||||
; CHECK:   [m, n] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
 | 
			
		||||
; CHECK: MustWriteAccess
 | 
			
		||||
; CHECK:   [m, n] -> { Stmt_for_j[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_j
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [m, n] -> { Stmt_for_j[i0, i1] : i0 >= 0 and i0 <= -1 + n and i1 >= 0 and i1 <= -1 + m };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [m, n] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [m, n] -> { Stmt_for_j[i0, i1] -> MemRef_A[i0, i1] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
define void @foo(i64 %n, i64 %m, double* %A) {
 | 
			
		||||
entry:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,31 +9,23 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 | 
			
		|||
;         A[i][j][k] = 1.0;
 | 
			
		||||
; }
 | 
			
		||||
 | 
			
		||||
; CHECK: Assumed Context:
 | 
			
		||||
; CHECK:   [o, m, n] -> {  :  }
 | 
			
		||||
; CHECK: p0: %o
 | 
			
		||||
; CHECK: p1: %m
 | 
			
		||||
; CHECK: p2: %n
 | 
			
		||||
; CHECK-NOT: p3
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [o, m, n] -> {  :  }
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Domain
 | 
			
		||||
; CHECK:   [o, m, n] -> { Stmt_for_k[i0, i1, i2] :
 | 
			
		||||
; CHECK-DAG:             i0 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i0 <= -1 + n
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 <= -1 + m
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i2 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i2 <= -1 + o
 | 
			
		||||
; CHECK:              }
 | 
			
		||||
; CHECK: Schedule
 | 
			
		||||
; CHECK:   [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK: WriteAccess
 | 
			
		||||
; CHECK:   [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> MemRef_A[i0, i1, i2] };
 | 
			
		||||
; CHECK:      p0: %o
 | 
			
		||||
; CHECK-NEXT: p1: %m
 | 
			
		||||
; CHECK-NEXT: p2: %n
 | 
			
		||||
; CHECK-NOT:  p3
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_k
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [o, m, n] -> { Stmt_for_k[i0, i1, i2] : i0 >= 0 and i0 <= -1 + n and i1 >= 0 and i1 <= -1 + m and i2 >= 0 and i2 <= -1 + o };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> MemRef_A[i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
define void @foo(i64 %n, i64 %m, i64 %o, double* %A) {
 | 
			
		||||
entry:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,44 +12,33 @@
 | 
			
		|||
; m and o, such that we generate unnecessary run-time checks. This is not a
 | 
			
		||||
; correctness issue, but could be improved.
 | 
			
		||||
 | 
			
		||||
; CHECK: Assumed Context:
 | 
			
		||||
; CHECK:  [o, m, n, p_3, p_4] -> { :
 | 
			
		||||
; CHECK-DAG: p_3 >= m
 | 
			
		||||
; CHECK-DAG: p_4 >= o
 | 
			
		||||
; CHECK:  }
 | 
			
		||||
; CHECK: p0: %o
 | 
			
		||||
; CHECK: p1: %m
 | 
			
		||||
; CHECK: p2: %n
 | 
			
		||||
; CHECK: p3: (zext i32 %m to i64)
 | 
			
		||||
; CHECK: p4: (zext i32 %o to i64)
 | 
			
		||||
; CHECK-NOT: p5
 | 
			
		||||
 | 
			
		||||
; CHECK: Arrays {
 | 
			
		||||
; CHECK: double MemRef_A[*][(zext i32 %m to i64)][(zext i32 %o to i64)]; // Element size 8
 | 
			
		||||
; CHECK: }
 | 
			
		||||
; CHECK: Arrays (Bounds as pw_affs) {
 | 
			
		||||
; CHECK: double MemRef_A[*][ [p_3] -> { [] -> [(p_3)] } ][ [p_4] -> { [] -> [(p_4)] } ]; // Element size 8
 | 
			
		||||
; CHECK: }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; CHECK: Domain
 | 
			
		||||
; CHECK:   [o, m, n, p_3, p_4] -> { Stmt_for_k[i0, i1, i2] :
 | 
			
		||||
; CHECK-DAG:             i0 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i0 <= -1 + n
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 <= -1 + m
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i2 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i2 <= -1 + o
 | 
			
		||||
; CHECK:              }
 | 
			
		||||
; CHECK: Schedule
 | 
			
		||||
; CHECK:   [o, m, n, p_3, p_4] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK: WriteAccess
 | 
			
		||||
; CHECK:   [o, m, n, p_3, p_4] -> { Stmt_for_k[i0, i1, i2] -> MemRef_A[i0, i1, i2] };
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [o, m, n, p_3, p_4] -> {  : p_3 >= m and p_4 >= o }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      p0: %o
 | 
			
		||||
; CHECK-NEXT: p1: %m
 | 
			
		||||
; CHECK-NEXT: p2: %n
 | 
			
		||||
; CHECK-NEXT: p3: (zext i32 %m to i64)
 | 
			
		||||
; CHECK-NEXT: p4: (zext i32 %o to i64)
 | 
			
		||||
; CHECK-NOT:  p5
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Arrays {
 | 
			
		||||
; CHECK-NEXT:     double MemRef_A[*][(zext i32 %m to i64)][(zext i32 %o to i64)]; // Element size 8
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Arrays (Bounds as pw_affs) {
 | 
			
		||||
; CHECK-NEXT:     double MemRef_A[*][ [p_3] -> { [] -> [(p_3)] } ][ [p_4] -> { [] -> [(p_4)] } ]; // Element size 8
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_k
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [o, m, n, p_3, p_4] -> { Stmt_for_k[i0, i1, i2] : i0 >= 0 and i0 <= -1 + n and i1 >= 0 and i1 <= -1 + m and i2 >= 0 and i2 <= -1 + o };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [o, m, n, p_3, p_4] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [o, m, n, p_3, p_4] -> { Stmt_for_k[i0, i1, i2] -> MemRef_A[i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
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-S128"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,31 +14,23 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 | 
			
		|||
;         A[i][j][k] = 1.0;
 | 
			
		||||
; }
 | 
			
		||||
 | 
			
		||||
; CHECK: Assumed Context:
 | 
			
		||||
; CHECK:   {  :  }
 | 
			
		||||
; CHECK: p0: %m
 | 
			
		||||
; CHECK: p1: %o
 | 
			
		||||
; CHECK: p2: %n
 | 
			
		||||
; CHECK-NOT: p3
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [m, o, n] -> {  :  }
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Domain
 | 
			
		||||
; CHECK:  [m, o, n] -> { Stmt_for_j[i0, i1, i2] :
 | 
			
		||||
; CHECK-DAG:             i0 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i0 <= -1 + n
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i1 <= -1 + o
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i2 >= 0
 | 
			
		||||
; CHECK-DAG:          and
 | 
			
		||||
; CHECK-DAG:             i2 <= -1 + m
 | 
			
		||||
; CHECK:              }
 | 
			
		||||
; CHECK: Schedule
 | 
			
		||||
; CHECK:   [m, o, n] -> { Stmt_for_j[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK: WriteAccess
 | 
			
		||||
; CHECK:   [m, o, n] -> { Stmt_for_j[i0, i1, i2] -> MemRef_A[i0, i2, i1] };
 | 
			
		||||
; CHECK:      p0: %m
 | 
			
		||||
; CHECK-NEXT: p1: %o
 | 
			
		||||
; CHECK-NEXT: p2: %n
 | 
			
		||||
; CHECK-NOT:  p3
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_j
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [m, o, n] -> { Stmt_for_j[i0, i1, i2] : i0 >= 0 and i0 <= -1 + n and i1 >= 0 and i1 <= -1 + o and i2 >= 0 and i2 <= -1 + m };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [m, o, n] -> { Stmt_for_j[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [m, o, n] -> { Stmt_for_j[i0, i1, i2] -> MemRef_A[i0, i2, i1] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
define void @foo(i64 %n, i64 %m, i64 %o, double* %A) {
 | 
			
		||||
entry:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,22 +19,42 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		|||
 | 
			
		||||
; CHECK-NOT: Stmt_for_i_1
 | 
			
		||||
 | 
			
		||||
; NONAFFINE: p0: %n
 | 
			
		||||
; NONAFFINE: p1: ((-1 + %n) * %n)
 | 
			
		||||
; NONAFFINE: Statements {
 | 
			
		||||
; NONAFFINE:   Stmt_for_i_1
 | 
			
		||||
; NONAFFINE:         MayWriteAccess :=   [Reduction Type: NONE]
 | 
			
		||||
; NONAFFINE:             [n, p_1] -> { Stmt_for_i_1[i0] -> MemRef_X[o0] : o0 >= -2305843009213693952 and o0 <= 2305843009213693949 };
 | 
			
		||||
; NONAFFINE:   Stmt_for_i_2
 | 
			
		||||
; NONAFFINE:         MustWriteAccess :=  [Reduction Type: NONE]
 | 
			
		||||
; NONAFFINE:             [n, p_1] -> { Stmt_for_i_2[i0] -> MemRef_X[p_1 + i0] };
 | 
			
		||||
; NONAFFINE:      p0: %n
 | 
			
		||||
; NONAFFINE-NEXT: p1: ((-1 + %n) * %n)
 | 
			
		||||
;
 | 
			
		||||
; NONAFFINE:      Statements {
 | 
			
		||||
; NONAFFINE-NEXT:     Stmt_for_i_1
 | 
			
		||||
; NONAFFINE-NEXT:         Domain :=
 | 
			
		||||
; NONAFFINE-NEXT:             [n, p_1] -> { Stmt_for_i_1[i0] : i0 >= 0 and i0 <= -1 + n };
 | 
			
		||||
; NONAFFINE-NEXT:         Schedule :=
 | 
			
		||||
; NONAFFINE-NEXT:             [n, p_1] -> { Stmt_for_i_1[i0] -> [0, i0] };
 | 
			
		||||
; NONAFFINE-NEXT:         MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; NONAFFINE-NEXT:             [n, p_1] -> { Stmt_for_i_1[i0] -> MemRef_X[o0] : o0 >= -2305843009213693952 and o0 <= 2305843009213693949 };
 | 
			
		||||
; NONAFFINE-NEXT:     Stmt_for_i_2
 | 
			
		||||
; NONAFFINE-NEXT:         Domain :=
 | 
			
		||||
; NONAFFINE-NEXT:             [n, p_1] -> { Stmt_for_i_2[i0] : i0 >= 0 and i0 <= -1 + n };
 | 
			
		||||
; NONAFFINE-NEXT:         Schedule :=
 | 
			
		||||
; NONAFFINE-NEXT:             [n, p_1] -> { Stmt_for_i_2[i0] -> [1, i0] };
 | 
			
		||||
; NONAFFINE-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; NONAFFINE-NEXT:             [n, p_1] -> { Stmt_for_i_2[i0] -> MemRef_X[p_1 + i0] };
 | 
			
		||||
; NONAFFINE-NEXT: }
 | 
			
		||||
 | 
			
		||||
; DELIN: Stmt_for_i_1
 | 
			
		||||
; DELIN:   MustWriteAccess :=
 | 
			
		||||
; DELIN:      [n] -> { Stmt_for_i_1[i0] -> MemRef_X[i0, 0] };
 | 
			
		||||
; DELIN: Stmt_for_i_2
 | 
			
		||||
; DELIN:   MustWriteAccess :=
 | 
			
		||||
; DELIN:      [n] -> { Stmt_for_i_2[i0] -> MemRef_X[-1 + n, i0] };
 | 
			
		||||
; DELIN:      Statements {
 | 
			
		||||
; DELIN-NEXT:     Stmt_for_i_1
 | 
			
		||||
; DELIN-NEXT:         Domain :=
 | 
			
		||||
; DELIN-NEXT:             [n] -> { Stmt_for_i_1[i0] : i0 >= 0 and i0 <= -1 + n };
 | 
			
		||||
; DELIN-NEXT:         Schedule :=
 | 
			
		||||
; DELIN-NEXT:             [n] -> { Stmt_for_i_1[i0] -> [0, i0] };
 | 
			
		||||
; DELIN-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; DELIN-NEXT:             [n] -> { Stmt_for_i_1[i0] -> MemRef_X[i0, 0] };
 | 
			
		||||
; DELIN-NEXT:     Stmt_for_i_2
 | 
			
		||||
; DELIN-NEXT:         Domain :=
 | 
			
		||||
; DELIN-NEXT:             [n] -> { Stmt_for_i_2[i0] : i0 >= 0 and i0 <= -1 + n };
 | 
			
		||||
; DELIN-NEXT:         Schedule :=
 | 
			
		||||
; DELIN-NEXT:             [n] -> { Stmt_for_i_2[i0] -> [1, i0] };
 | 
			
		||||
; DELIN-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; DELIN-NEXT:             [n] -> { Stmt_for_i_2[i0] -> MemRef_X[-1 + n, i0] };
 | 
			
		||||
; DELIN-NEXT: }
 | 
			
		||||
 | 
			
		||||
define void @single-and-multi-dimensional-array(i64 %n, float* %X) {
 | 
			
		||||
entry:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,23 +6,18 @@
 | 
			
		|||
;          for (long k = 0; k < n; k++)
 | 
			
		||||
;            A[i % 2][j][k] += 10;
 | 
			
		||||
;    }
 | 
			
		||||
;
 | 
			
		||||
; CHECK: ReadAccess :=	[Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:     [n] -> { Stmt_for_body_8[i0, i1, i2] -> MemRef_A[o0, i1, i2] : exists (e0 = floor((-i0 + o0)/2):
 | 
			
		||||
; CHECK-DAG:    2e0 = -i0 + o0
 | 
			
		||||
; CHECK-DAG:  and
 | 
			
		||||
; CHECK-DAG:    o0 <= 1
 | 
			
		||||
; CHECK-DAG:  and
 | 
			
		||||
; CHECK-DAG:    o0 >= 0
 | 
			
		||||
; CHECK:      };
 | 
			
		||||
; CHECK: MustWriteAccess :=	[Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:     [n] -> { Stmt_for_body_8[i0, i1, i2] -> MemRef_A[o0, i1, i2] : exists (e0 = floor((-i0 + o0)/2):
 | 
			
		||||
; CHECK-DAG:    2e0 = -i0 + o0
 | 
			
		||||
; CHECK-DAG:  and
 | 
			
		||||
; CHECK-DAG:    o0 <= 1
 | 
			
		||||
; CHECK-DAG:  and
 | 
			
		||||
; CHECK-DAG:    o0 >= 0
 | 
			
		||||
; CHECK:      };
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body_8
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_for_body_8[i0, i1, i2] : i0 <= 199 and i0 >= 0 and i1 >= 0 and i1 <= -1 + n and i2 >= 0 and i2 <= -1 + n };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_for_body_8[i0, i1, i2] -> [i0, i1, i2] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_for_body_8[i0, i1, i2] -> MemRef_A[o0, i1, i2] : exists (e0 = floor((-i0 + o0)/2): 2e0 = -i0 + o0 and o0 <= 1 and o0 >= 0) };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [n] -> { Stmt_for_body_8[i0, i1, i2] -> MemRef_A[o0, i1, i2] : exists (e0 = floor((-i0 + o0)/2): 2e0 = -i0 + o0 and o0 <= 1 and o0 >= 0) };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,14 +27,13 @@ return:
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; CHECK: body
 | 
			
		||||
; CHECK:        Domain :=
 | 
			
		||||
; CHECK:           { Stmt_body[i0, i1] :
 | 
			
		||||
; CHECK-DAG:         i0 >= 0
 | 
			
		||||
; CHECK-DAG:       and
 | 
			
		||||
; CHECK-DAG:         i0 <= 2046
 | 
			
		||||
; CHECK-DAG:       and
 | 
			
		||||
; CHECK-DAG:         i1 >= 0
 | 
			
		||||
; CHECK-DAG:       and
 | 
			
		||||
; CHECK-DAG:         i1 <= 1022
 | 
			
		||||
; CHECK:           }
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_body
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_body[i0, i1] : i0 <= 2046 and i0 >= 0 and i1 <= 1022 and i1 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_body[i0, i1] -> [i0, i1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_body[i0, i1] -> MemRef_a[i1] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,31 +18,46 @@
 | 
			
		|||
;      }
 | 
			
		||||
;    }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:       Region: %bb1---%bb21
 | 
			
		||||
; CHECK:       Stmt_bb3
 | 
			
		||||
; CHECK:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                 [b] -> { Stmt_bb3[i0] -> MemRef_x_1__phi[] };
 | 
			
		||||
; CHECK:       Stmt_bb7
 | 
			
		||||
; CHECK:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                 [b] -> { Stmt_bb7[i0] -> MemRef_x_1__phi[] };
 | 
			
		||||
; CHECK:       Stmt_bb8
 | 
			
		||||
; CHECK:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                 [b] -> { Stmt_bb8[i0] -> MemRef_x_1__phi[] };
 | 
			
		||||
; CHECK:       Stmt_bb10__TO__bb18
 | 
			
		||||
; CHECK-NEXT:        Domain :=
 | 
			
		||||
; CHECK-NEXT:            [b] -> { Stmt_bb10__TO__bb18[i0] :
 | 
			
		||||
; CHECK-DAG:               i0 >= 0
 | 
			
		||||
; CHECK-DAG:             and
 | 
			
		||||
; CHECK-DAG:               i0 <= 1023
 | 
			
		||||
; CHECK:                };
 | 
			
		||||
; CHECK-NEXT:        Schedule :=
 | 
			
		||||
; TODO: We build a complicated representation of the domain that will also complicate the schedule.
 | 
			
		||||
;       Once the domain is as simple as shown above this test should fail and this TODO can be removed.
 | 
			
		||||
; CHECK-NOT:            [b] -> { Stmt_bb10__TO__bb18[i0] -> [i0, 3] };
 | 
			
		||||
; CHECK:             ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:            [b] -> { Stmt_bb10__TO__bb18[i0] -> MemRef_x_1__phi[] }
 | 
			
		||||
; CHECK-NOT:   [Scalar: 1]
 | 
			
		||||
;
 | 
			
		||||
; TODO: We build a complicated representation of Stmt_bb10__TO__bb18's domain that will also complicate the schedule.
 | 
			
		||||
;       Once the domain is simple this test should fail and this TODO can be removed.
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb3
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb3[i0] : i0 <= 1023 and i0 >= 0 and i0 <= -1 + b };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb3[i0] -> [i0, 2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb3[i0] -> MemRef_x_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb7
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb7[i0] : i0 >= b and 2i0 >= 1 + b and i0 <= 1023 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb7[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb7[i0] -> MemRef_x_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb8
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb8[0] : b = 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb8[i0] -> [0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb8[i0] -> MemRef_b[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb8[i0] -> MemRef_x_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb10__TO__bb18
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb10__TO__bb18[i0] : (i0 <= 1023 and i0 >= 0 and i0 <= -1 + b) or (i0 >= b and 2i0 >= 1 + b and i0 <= 1023 and i0 >= 0); Stmt_bb10__TO__bb18[0] : b = 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb10__TO__bb18[i0] -> [i0, 3] : i0 <= -1 + b or (i0 >= b and 2i0 >= 1 + b); Stmt_bb10__TO__bb18[0] -> [0, 3] : b = 0 };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb10__TO__bb18[i0] -> MemRef_x_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb10__TO__bb18[i0] -> MemRef_A[o0] : o0 >= -2147483648 and o0 <= 2147483645 };
 | 
			
		||||
; CHECK-NEXT:         MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [b] -> { Stmt_bb10__TO__bb18[i0] -> MemRef_A[o0] : o0 >= -2147483648 and o0 <= 2147483645 };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @f(i32* %A, i32 %b) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,45 +18,32 @@
 | 
			
		|||
;        A[i] = x;
 | 
			
		||||
;      }
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK-LABEL: Region: %bb2---%bb21
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Region: %bb2---%bb21
 | 
			
		||||
; CHECK:   Stmt_bb3__TO__bb18
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             { Stmt_bb3__TO__bb18[i0] :
 | 
			
		||||
; CHECK-DAG:               i0 >= 0
 | 
			
		||||
; CHECK-DAG:             and
 | 
			
		||||
; CHECK-DAG:               i0 <= 1023
 | 
			
		||||
; CHECK:                };
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             { Stmt_bb3__TO__bb18[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK-NOT:         { Stmt_bb3__TO__bb18[i0] -> MemRef_x_0[] };
 | 
			
		||||
; CHECK-NOT:         { Stmt_bb3__TO__bb18[i0] -> MemRef_x_1[] };
 | 
			
		||||
; CHECK:         ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:        { Stmt_bb3__TO__bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NOT:         { Stmt_bb3__TO__bb18[i0] -> MemRef_x_0[] };
 | 
			
		||||
; CHECK-NOT:         { Stmt_bb3__TO__bb18[i0] -> MemRef_x_1[] };
 | 
			
		||||
; CHECK:         MayWriteAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:        { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK-NOT:         { Stmt_bb3__TO__bb18[i0] -> MemRef_x_0[] };
 | 
			
		||||
; CHECK-NOT:         { Stmt_bb3__TO__bb18[i0] -> MemRef_x_1[] };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:        { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK-NOT:         { Stmt_bb3__TO__bb18[i0] -> MemRef_x_0[] };
 | 
			
		||||
; CHECK-NOT:         { Stmt_bb3__TO__bb18[i0] -> MemRef_x_1[] };
 | 
			
		||||
; CHECK:   Stmt_bb18
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             { Stmt_bb18[i0] :
 | 
			
		||||
; CHECK-DAG:               i0 >= 0
 | 
			
		||||
; CHECK-DAG:             and
 | 
			
		||||
; CHECK-DAG:               i0 <= 1023
 | 
			
		||||
; CHECK:                };
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             { Stmt_bb18[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK:         ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:             { Stmt_bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             { Stmt_bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
;
 | 
			
		||||
; CHECK:       Statements {
 | 
			
		||||
; CHECK-NEXT:      Stmt_bb3__TO__bb18
 | 
			
		||||
; CHECK-NEXT:          Domain :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb3__TO__bb18[i0] : i0 <= 1023 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:          Schedule :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb3__TO__bb18[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb3__TO__bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:          MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_bb18
 | 
			
		||||
; CHECK-NEXT:          Domain :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb18[i0] : i0 <= 1023 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:          Schedule :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb18[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:  }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @f(i32* %A, i32 %b) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,41 +18,38 @@
 | 
			
		|||
;        A[i] = x;
 | 
			
		||||
;      }
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK-LABEL: Region: %bb2---%bb21
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Region: %bb2---%bb21
 | 
			
		||||
; CHECK:   Stmt_bb3__TO__bb18
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             { Stmt_bb3__TO__bb18[i0] :
 | 
			
		||||
; CHECK-DAG:           i0 >= 0
 | 
			
		||||
; CHECK-DAG:         and
 | 
			
		||||
; CHECK-DAG:           i0 <= 1023
 | 
			
		||||
; CHECK:              }
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             { Stmt_bb3__TO__bb18[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK:         ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             { Stmt_bb3__TO__bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:         MayWriteAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:             { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK:         MayWriteAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:             { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK:         MayWriteAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:             { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:             { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK:   Stmt_bb18
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             { Stmt_bb18[i0] :
 | 
			
		||||
; CHECK-DAG:           i0 >= 0
 | 
			
		||||
; CHECK-DAG:         and
 | 
			
		||||
; CHECK-DAG:           i0 <= 1023
 | 
			
		||||
; CHECK:              }
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             { Stmt_bb18[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK:         ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:             { Stmt_bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             { Stmt_bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
;
 | 
			
		||||
; CHECK:       Statements {
 | 
			
		||||
; CHECK-NEXT:      Stmt_bb3__TO__bb18
 | 
			
		||||
; CHECK-NEXT:          Domain :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb3__TO__bb18[i0] : i0 <= 1023 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:          Schedule :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb3__TO__bb18[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb3__TO__bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:          MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:          MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb3__TO__bb18[i0] -> MemRef_b[] };
 | 
			
		||||
; CHECK-NEXT:          MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_bb18
 | 
			
		||||
; CHECK-NEXT:          Domain :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb18[i0] : i0 <= 1023 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:          Schedule :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb18[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb18[i0] -> MemRef_x_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb18[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:  }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @f(i32* %A, i32 %b) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,54 +11,48 @@
 | 
			
		|||
;        A[i] = x + y;
 | 
			
		||||
;      }
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK-LABEL: Region: %bb1---%bb11
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Region: %bb1---%bb11
 | 
			
		||||
; CHECK:       Arrays {
 | 
			
		||||
; CHECK-NEXT:      i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; CHECK-NEXT:      i32 MemRef_x; [BasePtrOrigin: MemRef_A] // Element size 4
 | 
			
		||||
; CHECK-NEXT:      i32 MemRef_y__phi; // Element size 4
 | 
			
		||||
; CHECK-NEXT:  }
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Arrays {
 | 
			
		||||
; CHECK:   i32 MemRef_A[*];
 | 
			
		||||
; CHECK:   i32 MemRef_x; [BasePtrOrigin: MemRef_A]
 | 
			
		||||
; CHECK:   i32 MemRef_y__phi;
 | 
			
		||||
; CHECK: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Arrays (Bounds as pw_affs) {
 | 
			
		||||
; CHECK:   i32 MemRef_A[*];
 | 
			
		||||
; CHECK:   i32 MemRef_x; [BasePtrOrigin: MemRef_A]
 | 
			
		||||
; CHECK:   i32 MemRef_y__phi;
 | 
			
		||||
; CHECK: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Stmt_bb2__TO__bb7
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                { Stmt_bb2__TO__bb7[i0] :
 | 
			
		||||
; CHECK-DAG:               i0 >= 0
 | 
			
		||||
; CHECK-DAG:             and
 | 
			
		||||
; CHECK-DAG:               i0 <= 1023
 | 
			
		||||
; CHECK:                };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                { Stmt_bb2__TO__bb7[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_bb2__TO__bb7[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                { Stmt_bb2__TO__bb7[i0] -> MemRef_x[] };
 | 
			
		||||
; CHECK:            MayWriteAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                { Stmt_bb2__TO__bb7[i0] -> MemRef_y__phi[] };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                { Stmt_bb2__TO__bb7[i0] -> MemRef_y__phi[] };
 | 
			
		||||
; CHECK:      Stmt_bb7
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                { Stmt_bb7[i0] :
 | 
			
		||||
; CHECK-DAG:               i0 >= 0
 | 
			
		||||
; CHECK-DAG:             and
 | 
			
		||||
; CHECK-DAG:               i0 <= 1023
 | 
			
		||||
; CHECK:                };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                { Stmt_bb7[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                { Stmt_bb7[i0] -> MemRef_x[] };
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                { Stmt_bb7[i0] -> MemRef_y__phi[] };
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                { Stmt_bb7[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:       Arrays (Bounds as pw_affs) {
 | 
			
		||||
; CHECK-NEXT:      i32 MemRef_A[*]; // Element size 4
 | 
			
		||||
; CHECK-NEXT:      i32 MemRef_x; [BasePtrOrigin: MemRef_A] // Element size 4
 | 
			
		||||
; CHECK-NEXT:      i32 MemRef_y__phi; // Element size 4
 | 
			
		||||
; CHECK-NEXT:  }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:       Statements {
 | 
			
		||||
; CHECK-NEXT:      Stmt_bb2__TO__bb7
 | 
			
		||||
; CHECK-NEXT:          Domain :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb2__TO__bb7[i0] : i0 <= 1023 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:          Schedule :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb2__TO__bb7[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb2__TO__bb7[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb2__TO__bb7[i0] -> MemRef_x[] };
 | 
			
		||||
; CHECK-NEXT:          MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb2__TO__bb7[i0] -> MemRef_y__phi[] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb2__TO__bb7[i0] -> MemRef_y__phi[] };
 | 
			
		||||
; CHECK-NEXT:      Stmt_bb7
 | 
			
		||||
; CHECK-NEXT:          Domain :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb7[i0] : i0 <= 1023 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:          Schedule :=
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb7[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb7[i0] -> MemRef_x[] };
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb7[i0] -> MemRef_y__phi[] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:              { Stmt_bb7[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:  }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @f(i32* %A, i32 %b) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,35 +10,41 @@
 | 
			
		|||
;        A[i] = tmp;
 | 
			
		||||
;      }
 | 
			
		||||
;    }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK-LABEL:      Stmt_bb6
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                [N, c] -> { Stmt_bb6[i0] -> MemRef_tmp_0__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK-LABEL:      Stmt_bb7
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                [N, c] -> { Stmt_bb7[i0] -> MemRef_tmp_0__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK-LABEL:      Stmt_bb8
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                [N, c] -> { Stmt_bb8[i0] -> MemRef_tmp_0__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                [N, c] -> { Stmt_bb8[i0] -> MemRef_tmp_0[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK-LABEL:      Stmt_bb8b
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:            ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:                [N, c] -> { Stmt_bb8b[i0] -> MemRef_tmp_0[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:            MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:                [N, c] -> { Stmt_bb8b[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb6
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_bb6[i0] : i0 >= 1 + c and i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_bb6[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_bb6[i0] -> MemRef_tmp_0__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb7
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_bb7[i0] : i0 >= 0 and i0 <= c and i0 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_bb7[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_bb7[i0] -> MemRef_tmp_0__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb8
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_bb8[i0] : i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_bb8[i0] -> [i0, 2] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_bb8[i0] -> MemRef_tmp_0__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_bb8[i0] -> MemRef_tmp_0[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb8b
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_bb8b[i0] : i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_bb8b[i0] -> [i0, 3] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_bb8b[i0] -> MemRef_tmp_0[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_bb8b[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,28 +5,30 @@
 | 
			
		|||
;      for (int i = 0; i < N; i++)
 | 
			
		||||
;        tmp += A[i];
 | 
			
		||||
;    }
 | 
			
		||||
;
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-LABEL:   Stmt_bb1
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:              ReadAccess := [Reduction Type: NONE]
 | 
			
		||||
; CHECK:                  [N] -> { Stmt_bb1[i0] -> MemRef_tmp_0__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:              MustWriteAccess :=  [Reduction Type: NONE]
 | 
			
		||||
; CHECK:                  [N] -> { Stmt_bb1[i0] -> MemRef_tmp_0[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK-LABEL:   Stmt_bb4
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:              MustWriteAccess :=  [Reduction Type: NONE]
 | 
			
		||||
; CHECK:                  [N] -> { Stmt_bb4[i0] -> MemRef_tmp_0__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:              ReadAccess := [Reduction Type: NONE]
 | 
			
		||||
; CHECK:                  [N] -> { Stmt_bb4[i0] -> MemRef_tmp_0[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:              ReadAccess := [Reduction Type: NONE]
 | 
			
		||||
; CHECK:                  [N] -> { Stmt_bb4[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:      }
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb1
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb1[i0] : i0 >= 0 and i0 <= N; Stmt_bb1[0] : N <= -1 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb1[i0] -> [i0, 0] : i0 <= N; Stmt_bb1[0] -> [0, 0] : N <= -1 };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb1[i0] -> MemRef_tmp_0__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb1[i0] -> MemRef_tmp_0[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb4
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb4[i0] : i0 <= -1 + N and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb4[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb4[i0] -> MemRef_tmp_0__phi[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb4[i0] -> MemRef_tmp_0[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb4[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @f(float* %A, i32 %N) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,16 +4,79 @@
 | 
			
		|||
; increments already guarantee that there is no wrap in the loop trip
 | 
			
		||||
; count.
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT:   [N] -> {  :  }
 | 
			
		||||
;
 | 
			
		||||
;    int jd(int *restrict A, int x, int N) {
 | 
			
		||||
;      for (int i = 1; i < N; i++)
 | 
			
		||||
;        for (int j = 3; j < N; j++)
 | 
			
		||||
;          x += A[i];
 | 
			
		||||
;      return x;
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [N] -> {  :  }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_cond
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_cond[i0] : N >= 2 and i0 >= 0 and i0 <= -1 + N; Stmt_for_cond[0] : N <= 1 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_cond[i0] -> [i0, 0, 0, 0] : N >= 2 and i0 <= -1 + N; Stmt_for_cond[0] -> [0, 0, 0, 0] : N <= 1 };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_body[i0] : i0 <= -2 + N and i0 >= 0 and N >= 2 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_body[i0] -> [i0, 1, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_body[i0] -> MemRef_x_addr_0[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_body[i0] -> MemRef_x_addr_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_cond1
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_cond1[i0, i1] : i0 >= 0 and i0 <= -2 + N and i1 >= 0 and i1 <= -3 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_cond1[i0, i1] -> [i0, 2, i1, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1_lcssa__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_inc
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_inc[i0, i1] : i0 >= 0 and i0 <= -2 + N and i1 >= 0 and i1 <= -4 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_inc[i0, i1] -> [i0, 2, i1, 1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_inc[i0, i1] -> MemRef_A[1 + i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_end
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_end[i0] : N >= 3 and i0 >= 0 and i0 <= -2 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_end[i0] -> [i0, 3, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_end[i0] -> MemRef_x_addr_1_lcssa[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_end[i0] -> MemRef_x_addr_1_lcssa__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_inc4
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_inc4[i0] : N >= 3 and i0 >= 0 and i0 <= -2 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_inc4[i0] -> [i0, 4, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_inc4[i0] -> MemRef_x_addr_1_lcssa[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_inc4[i0] -> MemRef_x_addr_0__phi[] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define i32 @jd(i32* noalias %A, i32 %x, i32 %N) {
 | 
			
		||||
| 
						 | 
				
			
			@ -22,42 +85,15 @@ entry:
 | 
			
		|||
  br label %for.cond
 | 
			
		||||
 | 
			
		||||
for.cond:                                         ; preds = %for.inc4, %entry
 | 
			
		||||
; CHECK-LABEL: Stmt_for_cond
 | 
			
		||||
; CHECK:       ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.inc4 ], [ 1, %entry ]
 | 
			
		||||
  %x.addr.0 = phi i32 [ %x, %entry ], [ %x.addr.1.lcssa, %for.inc4 ]
 | 
			
		||||
  %cmp = icmp slt i64 %indvars.iv, %tmp
 | 
			
		||||
  br i1 %cmp, label %for.body, label %for.end6
 | 
			
		||||
 | 
			
		||||
for.body:                                         ; preds = %for.cond
 | 
			
		||||
; CHECK-LABEL: Stmt_for_body
 | 
			
		||||
; CHECK:       ReadAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_body[i0] -> MemRef_x_addr_0[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_body[i0] -> MemRef_x_addr_1__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
  br label %for.cond1
 | 
			
		||||
 | 
			
		||||
for.cond1:                                        ; preds = %for.inc, %for.body
 | 
			
		||||
; CHECK-LABEL: Stmt_for_cond1
 | 
			
		||||
; CHECK:       ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1_lcssa__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
  %x.addr.1 = phi i32 [ %x.addr.0, %for.body ], [ %add, %for.inc ]
 | 
			
		||||
  %j.0 = phi i32 [ 3, %for.body ], [ %inc, %for.inc ]
 | 
			
		||||
  %exitcond = icmp ne i32 %j.0, %N
 | 
			
		||||
| 
						 | 
				
			
			@ -67,16 +103,6 @@ for.body3:                                        ; preds = %for.cond1
 | 
			
		|||
  br label %for.inc
 | 
			
		||||
 | 
			
		||||
for.inc:                                          ; preds = %for.body3
 | 
			
		||||
; CHECK-LABEL: Stmt_for_inc
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_1__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:       ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:       ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_inc[i0, i1] -> MemRef_A[1 + i0] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %indvars.iv
 | 
			
		||||
  %tmp1 = load i32, i32* %arrayidx, align 4
 | 
			
		||||
  %add = add nsw i32 %x.addr.1, %tmp1
 | 
			
		||||
| 
						 | 
				
			
			@ -84,26 +110,10 @@ for.inc:                                          ; preds = %for.body3
 | 
			
		|||
  br label %for.cond1
 | 
			
		||||
 | 
			
		||||
for.end:                                          ; preds = %for.cond1
 | 
			
		||||
; CHECK-LABEL: Stmt_for_end
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_end[i0] -> MemRef_x_addr_1_lcssa[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:       ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_end[i0] -> MemRef_x_addr_1_lcssa__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
  %x.addr.1.lcssa = phi i32 [ %x.addr.1, %for.cond1 ]
 | 
			
		||||
  br label %for.inc4
 | 
			
		||||
 | 
			
		||||
for.inc4:                                         ; preds = %for.end
 | 
			
		||||
; CHECK-LABEL: Stmt_for_inc4
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:       ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_inc4[i0] -> MemRef_x_addr_1_lcssa[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           [N] -> { Stmt_for_inc4[i0] -> MemRef_x_addr_0__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
 | 
			
		||||
  br label %for.cond
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,92 @@
 | 
			
		|||
;            x += A[i];
 | 
			
		||||
;      return x;
 | 
			
		||||
;    }
 | 
			
		||||
;
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_cond
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_cond[i0] : i0 >= 0 and i0 <= N; Stmt_for_cond[0] : N <= -1 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_cond[i0] -> [i0, 0, 0, 0] : i0 <= N; Stmt_for_cond[0] -> [0, 0, 0, 0] : N <= -1 };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_cond[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_body[i0] : i0 <= -1 + N and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_body[i0] -> [i0, 1, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_body[i0] -> MemRef_x_addr_0[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_body[i0] -> MemRef_x_addr_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_cond1
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_cond1[i0, i1] : i0 >= 0 and i0 <= -1 + N and i1 >= 0 and i1 <= N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_cond1[i0, i1] -> [i0, 2, i1, 0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body3
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_body3[i0, i1] : i0 >= 0 and i0 <= -1 + N and i1 >= 0 and i1 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_body3[i0, i1] -> [i0, 2, i1, 1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_body3[i0, i1] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_body3[i0, i1] -> MemRef_x_addr_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_if_then
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_if_then[i0, i1] : i0 >= 0 and i0 <= -1 + c and i0 <= -1 + N and i1 >= 0 and i1 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_if_then[i0, i1] -> [i0, 2, i1, 2] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_if_then[i0, i1] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_if_then[i0, i1] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_if_then[i0, i1] -> MemRef_x_addr_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_if_end
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_if_end[i0, i1] : i0 >= 0 and i0 <= -1 + N and i1 >= 0 and i1 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_if_end[i0, i1] -> [i0, 2, i1, 3] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_if_end[i0, i1] -> MemRef_x_addr_2[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_if_end[i0, i1] -> MemRef_x_addr_2__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_inc
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_inc[i0, i1] : i0 >= 0 and i0 <= -1 + N and i1 >= 0 and i1 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_inc[i0, i1] -> [i0, 2, i1, 4] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_2[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_1__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_inc5
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_inc5[i0] : i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_inc5[i0] -> [i0, 3, 0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_inc5[i0] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N, c] -> { Stmt_for_inc5[i0] -> MemRef_x_addr_0__phi[] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define i32 @jd(i32* noalias %A, i32 %x, i32 %N, i32 %c) {
 | 
			
		||||
| 
						 | 
				
			
			@ -17,20 +102,6 @@ entry:
 | 
			
		|||
  br label %for.cond
 | 
			
		||||
 | 
			
		||||
for.cond:                                         ; preds = %for.inc5, %entry
 | 
			
		||||
; CHECK-LABEL: Stmt_for_cond
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_cond[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
  %indvars.iv = phi i64 [ %indvars.iv.next, %for.inc5 ], [ 0, %entry ]
 | 
			
		||||
  %x.addr.0 = phi i32 [ %x, %entry ], [ %x.addr.1, %for.inc5 ]
 | 
			
		||||
  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %indvars.iv
 | 
			
		||||
| 
						 | 
				
			
			@ -39,83 +110,29 @@ for.cond:                                         ; preds = %for.inc5, %entry
 | 
			
		|||
  br i1 %cmp, label %for.body, label %for.end7
 | 
			
		||||
 | 
			
		||||
for.body:                                         ; preds = %for.cond
 | 
			
		||||
; CHECK-LABEL: Stmt_for_body
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_body[i0] -> MemRef_x_addr_0[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_body[i0] -> MemRef_x_addr_1__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
  br label %for.cond1
 | 
			
		||||
 | 
			
		||||
for.cond1:                                        ; preds = %for.inc, %for.body
 | 
			
		||||
; CHECK-LABEL: Stmt_for_cond1
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
  %x.addr.1 = phi i32 [ %x.addr.0, %for.body ], [ %x.addr.2, %for.inc ]
 | 
			
		||||
  %j.0 = phi i32 [ 0, %for.body ], [ %inc, %for.inc ]
 | 
			
		||||
  %exitcond = icmp ne i32 %j.0, %N
 | 
			
		||||
  br i1 %exitcond, label %for.body3, label %for.end
 | 
			
		||||
 | 
			
		||||
for.body3:                                        ; preds = %for.cond1
 | 
			
		||||
; CHECK-LABEL: Stmt_for_body3
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_body3[i0, i1] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_body3[i0, i1] -> MemRef_x_addr_2__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
  %cmp4 = icmp slt i64 %indvars.iv, %tmp1
 | 
			
		||||
  br i1 %cmp4, label %if.then, label %if.end
 | 
			
		||||
 | 
			
		||||
if.then:                                          ; preds = %for.body3
 | 
			
		||||
; CHECK-LABEL: Stmt_if_then
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_if_then[i0, i1] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     ReadAccess := [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_if_then[i0, i1] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_if_then[i0, i1] -> MemRef_x_addr_2__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %indvars.iv
 | 
			
		||||
  %tmp2 = load i32, i32* %arrayidx, align 4
 | 
			
		||||
  %add = add nsw i32 %x.addr.1, %tmp2
 | 
			
		||||
  br label %if.end
 | 
			
		||||
 | 
			
		||||
if.end:                                           ; preds = %if.then, %for.body3
 | 
			
		||||
; CHECK-LABEL: Stmt_if_end
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_if_end[i0, i1] -> MemRef_x_addr_2[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
; CHECK:     ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_if_end[i0, i1] -> MemRef_x_addr_2__phi[] };
 | 
			
		||||
; CHECK-NOT: Access
 | 
			
		||||
  %x.addr.2 = phi i32 [ %add, %if.then ], [ %x.addr.1, %for.body3 ]
 | 
			
		||||
  br label %for.inc
 | 
			
		||||
 | 
			
		||||
for.inc:                                          ; preds = %if.end
 | 
			
		||||
; CHECK-LABEL: Stmt_for_inc
 | 
			
		||||
; CHECK:     ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_2[] };
 | 
			
		||||
; CHECK:     MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_1__phi[] };
 | 
			
		||||
  %inc = add nsw i32 %j.0, 1
 | 
			
		||||
  br label %for.cond1
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -123,11 +140,6 @@ for.end:                                          ; preds = %for.cond1
 | 
			
		|||
  br label %for.inc5
 | 
			
		||||
 | 
			
		||||
for.inc5:                                         ; preds = %for.end
 | 
			
		||||
; CHECK-LABEL: Stmt_for_inc5
 | 
			
		||||
; CHECK:     ReadAccess := [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_inc5[i0] -> MemRef_x_addr_1[] };
 | 
			
		||||
; CHECK:     MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:         [N, c] -> { Stmt_for_inc5[i0] -> MemRef_x_addr_0__phi[] };
 | 
			
		||||
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
 | 
			
		||||
  br label %for.cond
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,55 +4,55 @@
 | 
			
		|||
; pointer as base pointer of an array store. As a result, we get both scalar
 | 
			
		||||
; and array memory accesses to A[] and A[0].
 | 
			
		||||
 | 
			
		||||
; CHECK: Arrays {
 | 
			
		||||
; CHECK:     float MemRef_A[*]; // Element size 4
 | 
			
		||||
; CHECK:     float* MemRef_A; // Element size 8
 | 
			
		||||
; CHECK:     float* MemRef_x__phi; // Element size 8
 | 
			
		||||
; CHECK:     float* MemRef_B; // Element size 8
 | 
			
		||||
; CHECK:     float* MemRef_C[*]; // Element size 8
 | 
			
		||||
; CHECK: }
 | 
			
		||||
; CHECK: Arrays (Bounds as pw_affs) {
 | 
			
		||||
; CHECK:     float MemRef_A[*]; // Element size 4
 | 
			
		||||
; CHECK:     float* MemRef_A; // Element size 8
 | 
			
		||||
; CHECK:     float* MemRef_x__phi; // Element size 8
 | 
			
		||||
; CHECK:     float* MemRef_B; // Element size 8
 | 
			
		||||
; CHECK:     float* MemRef_C[*]; // Element size 8
 | 
			
		||||
; CHECK: }
 | 
			
		||||
; CHECK: Alias Groups (0):
 | 
			
		||||
; CHECK:     n/a
 | 
			
		||||
; CHECK: Statements {
 | 
			
		||||
; CHECK:   Stmt_then
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             [p] -> { Stmt_then[i0] : p = 32 and i0 <= 999 and i0 >= 0 };
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             [p] -> { Stmt_then[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             [p] -> { Stmt_then[i0] -> MemRef_A[0] };
 | 
			
		||||
; CHECK:         ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:             [p] -> { Stmt_then[i0] -> MemRef_A[] };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:             [p] -> { Stmt_then[i0] -> MemRef_x__phi[] };
 | 
			
		||||
; CHECK:   Stmt_else
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             [p] -> { Stmt_else[i0] : (p >= 33 and i0 <= 999 and i0 >= 0) or (p <= 31 and i0 <= 999 and i0 >= 0) };
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             [p] -> { Stmt_else[i0] -> [i0, 0] : p >= 33 or p <= 31 };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             [p] -> { Stmt_else[i0] -> MemRef_A[0] };
 | 
			
		||||
; CHECK:         ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:             [p] -> { Stmt_else[i0] -> MemRef_B[] };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:             [p] -> { Stmt_else[i0] -> MemRef_x__phi[] };
 | 
			
		||||
; CHECK:   Stmt_bb8
 | 
			
		||||
; CHECK:         Domain :=
 | 
			
		||||
; CHECK:             [p] -> { Stmt_bb8[i0] : (p >= 33 and i0 <= 999 and i0 >= 0) or (p <= 32 and i0 <= 999 and i0 >= 0) };
 | 
			
		||||
; CHECK:         Schedule :=
 | 
			
		||||
; CHECK:             [p] -> { Stmt_bb8[i0] -> [i0, 2] };
 | 
			
		||||
; CHECK:         ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:             [p] -> { Stmt_bb8[i0] -> MemRef_x__phi[] };
 | 
			
		||||
; CHECK:         MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:             [p] -> { Stmt_bb8[i0] -> MemRef_C[0] };
 | 
			
		||||
 | 
			
		||||
; CHECK:      Arrays {
 | 
			
		||||
; CHECK-NEXT:     float MemRef_A[*]; // Element size 4
 | 
			
		||||
; CHECK-NEXT:     float* MemRef_A; // Element size 8
 | 
			
		||||
; CHECK-NEXT:     float* MemRef_x__phi; // Element size 8
 | 
			
		||||
; CHECK-NEXT:     float* MemRef_B; // Element size 8
 | 
			
		||||
; CHECK-NEXT:     float* MemRef_C[*]; // Element size 8
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
; CHECK:      Arrays (Bounds as pw_affs) {
 | 
			
		||||
; CHECK-NEXT:     float MemRef_A[*]; // Element size 4
 | 
			
		||||
; CHECK-NEXT:     float* MemRef_A; // Element size 8
 | 
			
		||||
; CHECK-NEXT:     float* MemRef_x__phi; // Element size 8
 | 
			
		||||
; CHECK-NEXT:     float* MemRef_B; // Element size 8
 | 
			
		||||
; CHECK-NEXT:     float* MemRef_C[*]; // Element size 8
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
; CHECK:      Alias Groups (0):
 | 
			
		||||
; CHECK-NEXT:     n/a
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_then
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [p] -> { Stmt_then[i0] : p = 32 and i0 <= 999 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [p] -> { Stmt_then[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [p] -> { Stmt_then[i0] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [p] -> { Stmt_then[i0] -> MemRef_A[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [p] -> { Stmt_then[i0] -> MemRef_x__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_else
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [p] -> { Stmt_else[i0] : (p >= 33 and i0 <= 999 and i0 >= 0) or (p <= 31 and i0 <= 999 and i0 >= 0) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [p] -> { Stmt_else[i0] -> [i0, 0] : p >= 33 or p <= 31 };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [p] -> { Stmt_else[i0] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [p] -> { Stmt_else[i0] -> MemRef_B[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [p] -> { Stmt_else[i0] -> MemRef_x__phi[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb8
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [p] -> { Stmt_bb8[i0] : (p >= 33 and i0 <= 999 and i0 >= 0) or (p <= 32 and i0 <= 999 and i0 >= 0) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [p] -> { Stmt_bb8[i0] -> [i0, 2] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [p] -> { Stmt_bb8[i0] -> MemRef_x__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [p] -> { Stmt_bb8[i0] -> MemRef_C[0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,26 +9,32 @@
 | 
			
		|||
;      return sum;
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK: Stmt_next
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_next[] };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_next[] -> [0, 0] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_next[] -> MemRef_sum[] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_next[] -> MemRef_phisum__phi[] };
 | 
			
		||||
; CHECK: Stmt_bb1
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           { Stmt_bb1[i0] : i0 <= 100 and i0 >= 0 };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           { Stmt_bb1[i0] -> [1, i0] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb1[i0] -> MemRef_phisum__phi[] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK:           { Stmt_bb1[i0] -> MemRef_phisum__phi[] };
 | 
			
		||||
; CHECK:       ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK:           { Stmt_bb1[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_next
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_next[] };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_next[] -> [0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_next[] -> MemRef_sum[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_next[] -> MemRef_phisum__phi[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_next[] -> MemRef_phisummerge[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb1
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb1[i0] : i0 <= 100 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb1[i0] -> [1, i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb1[i0] -> MemRef_phisum__phi[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb1[i0] -> MemRef_phisum__phi[] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb1[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_bb1[i0] -> MemRef_phisummerge[] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,17 +2,17 @@
 | 
			
		|||
;
 | 
			
		||||
; Check we remove read only statements.
 | 
			
		||||
;
 | 
			
		||||
; CHECK:         Statements {
 | 
			
		||||
; CHECK-NEXT:      Stmt_for_body_2
 | 
			
		||||
; CHECK-NEXT:            Domain :=
 | 
			
		||||
; CHECK-NEXT:                { Stmt_for_body_2[i0] : i0 <= 99 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:            Schedule :=
 | 
			
		||||
; CHECK-NEXT:                { Stmt_for_body_2[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:            ReadAccess := [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                { Stmt_for_body_2[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:                { Stmt_for_body_2[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:    }
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body_2
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body_2[i0] : i0 <= 99 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body_2[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body_2[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             { Stmt_for_body_2[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
;    int g(int);
 | 
			
		||||
;    void f(int *A) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,16 +1,16 @@
 | 
			
		|||
; RUN: opt %loadPolly -pass-remarks-analysis="polly-scops" -polly-scops < %s 2>&1| FileCheck %s
 | 
			
		||||
; RUN: opt %loadPolly -pass-remarks-analysis="polly-scops" -polly-scops -disable-output < %s 2>&1 | FileCheck %s
 | 
			
		||||
;
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:4:7: SCoP begins here.
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:8:5: Finite loop assumption: [M, N, Debug] -> {  : M >= 0 or (M <= -2 and N <= 0) or (M = -1 and N <= 0) }
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:13:7: No-error assumption: [M, N, Debug] -> {  : M <= -1 or (M >= 0 and N <= 0) or (Debug = 0 and M >= 0 and N >= 1) }
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:9:7: Inbounds assumption: [M, N, Debug] -> {  : M <= 100 or (M >= 1 and N <= 0) }
 | 
			
		||||
; CHECK: remark: <unknown>:0:0: No-overflows assumption: [N, M, Debug] -> {  : M <= 2147483647 - N and M >= -2147483648 - N }
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:8:5: Finite loop assumption:    [M, N, Debug] -> {  : M >= 0 or (M <= -2 and N <= 0) or (M = -1 and N <= 0) }
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:13:7: No-error assumption:    [M, N, Debug] -> {  : M <= -1 or (M >= 0 and N <= 0) or (Debug = 0 and M >= 0 and N >= 1) }
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:9:7: Inbounds assumption:    [M, N, Debug] -> {  : M <= 100 or (M >= 1 and N <= 0) }
 | 
			
		||||
; CHECK: remark: <unknown>:0:0: No-overflows assumption:    [N, M, Debug] -> {  : M <= 2147483647 - N and M >= -2147483648 - N }
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:9:18: Possibly aliasing pointer, use restrict keyword.
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:9:33: Possibly aliasing pointer, use restrict keyword.
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:9:15: Possibly aliasing pointer, use restrict keyword.
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:14:3: SCoP ends here.
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:19:3: SCoP begins here.
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:21:11: Invariant load assumption: [tmp] -> {  : 1 = 0 }
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:21:11: Invariant load assumption:    [tmp] -> {  : 1 = 0 }
 | 
			
		||||
; CHECK: remark: test/ScopInfo/remarks.c:22:16: SCoP ends here but was dismissed.
 | 
			
		||||
;
 | 
			
		||||
;    #include <stdio.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,31 +29,34 @@ return:
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; CHECK: Arrays {
 | 
			
		||||
; CHECK:   i64 MemRef_a[*];
 | 
			
		||||
; CHECK:   i64 MemRef_val; [BasePtrOrigin: MemRef_a]
 | 
			
		||||
; CHECK: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK: Arrays (Bounds as pw_affs) {
 | 
			
		||||
; CHECK:   i64 MemRef_a[*];
 | 
			
		||||
; CHECK:   i64 MemRef_val; [BasePtrOrigin: MemRef_a]
 | 
			
		||||
; CHECK: }
 | 
			
		||||
 | 
			
		||||
; CHECK: Stmt_S1
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           [N] -> { Stmt_S1[i0] : i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           [N] -> { Stmt_S1[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK:       ReadAccess :=
 | 
			
		||||
; CHECK:           [N] -> { Stmt_S1[i0] -> MemRef_a[i0] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=
 | 
			
		||||
; CHECK:           [N] -> { Stmt_S1[i0] -> MemRef_val[] };
 | 
			
		||||
; CHECK: Stmt_S2
 | 
			
		||||
; CHECK:       Domain :=
 | 
			
		||||
; CHECK:           [N] -> { Stmt_S2[i0] : i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK:       Schedule :=
 | 
			
		||||
; CHECK:           [N] -> { Stmt_S2[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK:       ReadAccess :=
 | 
			
		||||
; CHECK:           [N] -> { Stmt_S2[i0] -> MemRef_val[] };
 | 
			
		||||
; CHECK:       MustWriteAccess :=
 | 
			
		||||
; CHECK:           [N] -> { Stmt_S2[i0] -> MemRef_a[i0] };
 | 
			
		||||
; CHECK:      Arrays {
 | 
			
		||||
; CHECK-NEXT:     i64 MemRef_a[*]; // Element size 8
 | 
			
		||||
; CHECK-NEXT:     i64 MemRef_val; [BasePtrOrigin: MemRef_a] // Element size 8
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Arrays (Bounds as pw_affs) {
 | 
			
		||||
; CHECK-NEXT:     i64 MemRef_a[*]; // Element size 8
 | 
			
		||||
; CHECK-NEXT:     i64 MemRef_val; [BasePtrOrigin: MemRef_a] // Element size 8
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_S1
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_S1[i0] : i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_S1[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_S1[i0] -> MemRef_a[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_S1[i0] -> MemRef_val[] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_S2
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_S2[i0] : i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_S2[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_S2[i0] -> MemRef_val[] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_S2[i0] -> MemRef_a[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,16 +24,20 @@ return:                                           ; preds = %bb, %entry
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; CHECK: Assumed Context:
 | 
			
		||||
; CHECK:   {  :  }
 | 
			
		||||
; CHECK: Arrays {
 | 
			
		||||
; CHECK:     i64 MemRef_a[*]; // Element size 8
 | 
			
		||||
; CHECK: }
 | 
			
		||||
 | 
			
		||||
; CHECK:  Stmt_bb
 | 
			
		||||
; CHECK:        Domain :=
 | 
			
		||||
; CHECK:            [N] -> { Stmt_bb[i0] : i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK:        Schedule :=
 | 
			
		||||
; CHECK:            [N] -> { Stmt_bb[i0] -> [i0] };
 | 
			
		||||
; CHECK:        MustWriteAccess := [Reduction Type: NONE]
 | 
			
		||||
; CHECK:            [N] -> { Stmt_bb[i0] -> MemRef_a[i0] };
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [N] -> {  :  }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Arrays {
 | 
			
		||||
; CHECK-NEXT:     i64 MemRef_a[*]; // Element size 8
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_bb
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb[i0] : i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_bb[i0] -> MemRef_a[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,42 +17,56 @@
 | 
			
		|||
;          break;
 | 
			
		||||
;        }
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb_1
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] : exists (e0 = floor((-1 + i0)/4): 4e0 = -1 + i0 and i0 >= 1 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] -> [i0, 2] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb_2
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_2[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_2[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_2[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_2[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb_6
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_6[i0] : exists (e0 = floor((-3 + i0)/4): 4e0 = -3 + i0 and i0 >= 0 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_6[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_6[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_6[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
; AST:      if (1)
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK:      Stmt_sw_bb_1
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_1[i0] : exists (e0 = floor((-1 + i0)/4): 4e0 = -1 + i0 and i0 >= 1 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_1[i0] -> [i0, 2] };
 | 
			
		||||
; CHECK:      Stmt_sw_bb_2
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_2[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_2[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK:      Stmt_sw_bb_6
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_6[i0] : exists (e0 = floor((-3 + i0)/4): 4e0 = -3 + i0 and i0 >= 0 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_6[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
;
 | 
			
		||||
;
 | 
			
		||||
; AST:  if (1)
 | 
			
		||||
;
 | 
			
		||||
; AST:      {
 | 
			
		||||
; AST:        for (int c0 = 1; c0 < N - 2; c0 += 4) {
 | 
			
		||||
; AST:          Stmt_sw_bb_1(c0);
 | 
			
		||||
; AST:          Stmt_sw_bb_2(c0 + 1);
 | 
			
		||||
; AST:          Stmt_sw_bb_6(c0 + 2);
 | 
			
		||||
; AST:        }
 | 
			
		||||
; AST:        if (N >= 2)
 | 
			
		||||
; AST:          if (N % 4 >= 2) {
 | 
			
		||||
; AST:            Stmt_sw_bb_1(-(N % 4) + N + 1);
 | 
			
		||||
; AST:            if ((N - 3) % 4 == 0)
 | 
			
		||||
; AST:              Stmt_sw_bb_2(N - 1);
 | 
			
		||||
; AST:          }
 | 
			
		||||
; AST:      }
 | 
			
		||||
; AST:          {
 | 
			
		||||
; AST-NEXT:       for (int c0 = 1; c0 < N - 2; c0 += 4) {
 | 
			
		||||
; AST-NEXT:         Stmt_sw_bb_1(c0);
 | 
			
		||||
; AST-NEXT:         Stmt_sw_bb_2(c0 + 1);
 | 
			
		||||
; AST-NEXT:         Stmt_sw_bb_6(c0 + 2);
 | 
			
		||||
; AST-NEXT:       }
 | 
			
		||||
; AST-NEXT:       if (N >= 2)
 | 
			
		||||
; AST-NEXT:         if (N % 4 >= 2) {
 | 
			
		||||
; AST-NEXT:           Stmt_sw_bb_1(-(N % 4) + N + 1);
 | 
			
		||||
; AST-NEXT:           if ((N - 3) % 4 == 0)
 | 
			
		||||
; AST-NEXT:             Stmt_sw_bb_2(N - 1);
 | 
			
		||||
; AST-NEXT:         }
 | 
			
		||||
; AST-NEXT:     }
 | 
			
		||||
;
 | 
			
		||||
; AST:      else
 | 
			
		||||
; AST-NEXT:     {  /* original code */ }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @f(i32* %A, i32 %N) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,34 +16,39 @@
 | 
			
		|||
;          break;
 | 
			
		||||
;        }
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] : exists (e0 = floor((i0)/4): 4e0 = i0 and i0 >= 0 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb_2
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_2[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_2[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_2[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_2[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
; AST:      if (1)
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK-NOT:  Stmt_sw_bb1
 | 
			
		||||
; CHECK:      Stmt_sw_bb
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb[i0] : exists (e0 = floor((i0)/4): 4e0 = i0 and i0 >= 0 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NOT:  Stmt_sw_bb1
 | 
			
		||||
; CHECK:      Stmt_sw_bb_2
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_2[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_2[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK-NOT:  Stmt_sw_bb1
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
;
 | 
			
		||||
; AST:  if (1)
 | 
			
		||||
;
 | 
			
		||||
; AST:      for (int c0 = 0; c0 < N; c0 += 4) {
 | 
			
		||||
; AST:        Stmt_sw_bb(c0);
 | 
			
		||||
; AST:        if (N >= c0 + 3)
 | 
			
		||||
; AST:          Stmt_sw_bb_2(c0 + 2);
 | 
			
		||||
; AST:      }
 | 
			
		||||
;
 | 
			
		||||
; AST:  else
 | 
			
		||||
; AST:      {  /* original code */ }
 | 
			
		||||
; AST:          for (int c0 = 0; c0 < N; c0 += 4) {
 | 
			
		||||
; AST-NEXT:       Stmt_sw_bb(c0);
 | 
			
		||||
; AST-NEXT:       if (N >= c0 + 3)
 | 
			
		||||
; AST-NEXT:         Stmt_sw_bb_2(c0 + 2);
 | 
			
		||||
; AST-NEXT:     }
 | 
			
		||||
;
 | 
			
		||||
; AST:      else
 | 
			
		||||
; AST-NEXT:     {  /* original code */ }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @f(i32* %A, i32 %N) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,47 +16,63 @@
 | 
			
		|||
;          break;
 | 
			
		||||
;        }
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] : exists (e0 = floor((i0)/4): 4e0 = i0 and i0 >= 0 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] -> [i0, 2] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb_1
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] : exists (e0 = floor((2 + i0)/4): i0 >= 0 and i0 <= -1 + N and 4e0 >= -1 + i0 and 4e0 <= i0) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] -> [i0, 3] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb_5
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_5[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_5[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_5[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_5[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb_9
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_9[i0] : exists (e0 = floor((i0)/4): i0 >= 0 and i0 <= -1 + N and 4e0 >= -3 + i0 and 4e0 <= -2 + i0) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_9[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_9[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_9[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
; AST:      if (1)
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK:      Stmt_sw_bb
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb[i0] : exists (e0 = floor((i0)/4): 4e0 = i0 and i0 >= 0 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb[i0] -> [i0, 2] };
 | 
			
		||||
; CHECK:      Stmt_sw_bb_1
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_1[i0] : exists (e0 = floor((2 + i0)/4): i0 >= 0 and i0 <= -1 + N and 4e0 >= -1 + i0 and 4e0 <= i0) };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_1[i0] -> [i0, 3] };
 | 
			
		||||
; CHECK:      Stmt_sw_bb_5
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_5[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_5[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK:      Stmt_sw_bb_9
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_9[i0] : exists (e0 = floor((i0)/4): i0 >= 0 and i0 <= -1 + N and 4e0 >= -3 + i0 and 4e0 <= -2 + i0) };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_9[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
;
 | 
			
		||||
; AST:  if (1)
 | 
			
		||||
;
 | 
			
		||||
; AST:      for (int c0 = 0; c0 < N; c0 += 1) {
 | 
			
		||||
; AST:        if ((c0 - 2) % 4 == 0)
 | 
			
		||||
; AST:          Stmt_sw_bb_5(c0);
 | 
			
		||||
; AST:        if (c0 % 4 >= 2) {
 | 
			
		||||
; AST:          Stmt_sw_bb_9(c0);
 | 
			
		||||
; AST:        } else {
 | 
			
		||||
; AST:          if (c0 % 4 == 0)
 | 
			
		||||
; AST:            Stmt_sw_bb(c0);
 | 
			
		||||
; AST:          Stmt_sw_bb_1(c0);
 | 
			
		||||
; AST:        }
 | 
			
		||||
; AST:      }
 | 
			
		||||
;
 | 
			
		||||
; AST:  else
 | 
			
		||||
; AST:      {  /* original code */ }
 | 
			
		||||
; AST:          for (int c0 = 0; c0 < N; c0 += 1) {
 | 
			
		||||
; AST-NEXT:       if ((c0 - 2) % 4 == 0)
 | 
			
		||||
; AST-NEXT:         Stmt_sw_bb_5(c0);
 | 
			
		||||
; AST-NEXT:       if (c0 % 4 >= 2) {
 | 
			
		||||
; AST-NEXT:         Stmt_sw_bb_9(c0);
 | 
			
		||||
; AST-NEXT:       } else {
 | 
			
		||||
; AST-NEXT:         if (c0 % 4 == 0)
 | 
			
		||||
; AST-NEXT:           Stmt_sw_bb(c0);
 | 
			
		||||
; AST-NEXT:         Stmt_sw_bb_1(c0);
 | 
			
		||||
; AST-NEXT:       }
 | 
			
		||||
; AST-NEXT:     }
 | 
			
		||||
;
 | 
			
		||||
; AST:      else
 | 
			
		||||
; AST-NEXT:     {  /* original code */ }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @f(i32* %A, i32 %N) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,54 +20,69 @@
 | 
			
		|||
;          A[i - 1] += A[i + 1];
 | 
			
		||||
;        }
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] : exists (e0 = floor((i0)/4): 4e0 = i0 and i0 >= 0 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] -> [i0, 3] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb_1
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] : exists (e0 = floor((-1 + i0)/4): 4e0 = -1 + i0 and i0 >= 1 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] -> [i0, 2] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb_5
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_5[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_5[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_5[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_5[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb_9
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_9[i0] : exists (e0 = floor((-3 + i0)/4): 4e0 = -3 + i0 and i0 >= 0 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_9[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_9[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_9[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
; AST:      if (1)
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK-NOT:  Stmt_sw_default
 | 
			
		||||
; CHECK:      Stmt_sw_bb
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb[i0] : exists (e0 = floor((i0)/4): 4e0 = i0 and i0 >= 0 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb[i0] -> [i0, 3] };
 | 
			
		||||
; CHECK:      Stmt_sw_bb_1
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_1[i0] : exists (e0 = floor((-1 + i0)/4): 4e0 = -1 + i0 and i0 >= 1 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_1[i0] -> [i0, 2] };
 | 
			
		||||
; CHECK:      Stmt_sw_bb_5
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_5[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_5[i0] -> [i0, 1] };
 | 
			
		||||
; CHECK:      Stmt_sw_bb_9
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_9[i0] : exists (e0 = floor((-3 + i0)/4): 4e0 = -3 + i0 and i0 >= 0 and i0 <= -1 + N) };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_9[i0] -> [i0, 0] };
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
;
 | 
			
		||||
; AST:  if (1)
 | 
			
		||||
;
 | 
			
		||||
; AST:      {
 | 
			
		||||
; AST:        for (int c0 = 0; c0 < N - 3; c0 += 4) {
 | 
			
		||||
; AST:          Stmt_sw_bb(c0);
 | 
			
		||||
; AST:          Stmt_sw_bb_1(c0 + 1);
 | 
			
		||||
; AST:          Stmt_sw_bb_5(c0 + 2);
 | 
			
		||||
; AST:          Stmt_sw_bb_9(c0 + 3);
 | 
			
		||||
; AST:        }
 | 
			
		||||
; AST:        if (N >= 1)
 | 
			
		||||
; AST:          if (N % 4 >= 1) {
 | 
			
		||||
; AST:            Stmt_sw_bb(-((N - 1) % 4) + N - 1);
 | 
			
		||||
; AST:            if (N % 4 >= 2) {
 | 
			
		||||
; AST:              Stmt_sw_bb_1(-((N - 1) % 4) + N);
 | 
			
		||||
; AST:              if ((N - 3) % 4 == 0)
 | 
			
		||||
; AST:                Stmt_sw_bb_5(N - 1);
 | 
			
		||||
; AST:            }
 | 
			
		||||
; AST:          }
 | 
			
		||||
; AST:      }
 | 
			
		||||
;
 | 
			
		||||
; AST:  else
 | 
			
		||||
; AST:      {  /* original code */ }
 | 
			
		||||
; AST:          {
 | 
			
		||||
; AST-NEXT:       for (int c0 = 0; c0 < N - 3; c0 += 4) {
 | 
			
		||||
; AST-NEXT:         Stmt_sw_bb(c0);
 | 
			
		||||
; AST-NEXT:         Stmt_sw_bb_1(c0 + 1);
 | 
			
		||||
; AST-NEXT:         Stmt_sw_bb_5(c0 + 2);
 | 
			
		||||
; AST-NEXT:         Stmt_sw_bb_9(c0 + 3);
 | 
			
		||||
; AST-NEXT:       }
 | 
			
		||||
; AST-NEXT:       if (N >= 1)
 | 
			
		||||
; AST-NEXT:         if (N % 4 >= 1) {
 | 
			
		||||
; AST-NEXT:           Stmt_sw_bb(-((N - 1) % 4) + N - 1);
 | 
			
		||||
; AST-NEXT:           if (N % 4 >= 2) {
 | 
			
		||||
; AST-NEXT:             Stmt_sw_bb_1(-((N - 1) % 4) + N);
 | 
			
		||||
; AST-NEXT:             if ((N - 3) % 4 == 0)
 | 
			
		||||
; AST-NEXT:               Stmt_sw_bb_5(N - 1);
 | 
			
		||||
; AST-NEXT:           }
 | 
			
		||||
; AST-NEXT:         }
 | 
			
		||||
; AST-NEXT:     }
 | 
			
		||||
;
 | 
			
		||||
; AST:      else
 | 
			
		||||
; AST-NEXT:     {  /* original code */ }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @f(i32* %A, i32 %N) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,19 +13,27 @@
 | 
			
		|||
;        }
 | 
			
		||||
;      }
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_body[0] : N >= 1 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_body[i0] -> [0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_body[i0] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_for_body[i0] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
; AST:      if (1)
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK:      Stmt_for_body
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_for_body[0] : N >= 1 };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_for_body[i0] -> [0] };
 | 
			
		||||
; CHECK-NOT:  Stmt_sw_bb
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
;
 | 
			
		||||
; AST:    if (N >= 1)
 | 
			
		||||
; AST:      Stmt_for_body(0);
 | 
			
		||||
; AST:          if (N >= 1)
 | 
			
		||||
; AST-NEXT:       Stmt_for_body(0);
 | 
			
		||||
;
 | 
			
		||||
; AST:      else
 | 
			
		||||
; AST-NEXT:     {  /* original code */ }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @f(i32* %A, i32* %B, i32 %N) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,40 +20,63 @@
 | 
			
		|||
;        }
 | 
			
		||||
;      }
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[0] : N >= 1 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] -> [0, 3] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb[i0] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb_1
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[1] : N >= 2 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] -> [1, 2] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] -> MemRef_A[1] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_1[i0] -> MemRef_A[1] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb_5
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_5[2] : N >= 3 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_5[i0] -> [2, 1] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_5[i0] -> MemRef_A[2] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_5[i0] -> MemRef_A[2] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_sw_bb_9
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_9[3] : N >= 4 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_9[i0] -> [3, 0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_9[i0] -> MemRef_A[3] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: +] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_sw_bb_9[i0] -> MemRef_A[3] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
; AST:      if (1)
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK:      Stmt_sw_bb
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb[0] : N >= 1 };
 | 
			
		||||
; CHECK:      Stmt_sw_bb_1
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_1[1] : N >= 2 };
 | 
			
		||||
; CHECK:      Stmt_sw_bb_5
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_5[2] : N >= 3 };
 | 
			
		||||
; CHECK:      Stmt_sw_bb_9
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [N] -> { Stmt_sw_bb_9[3] : N >= 4 };
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
;
 | 
			
		||||
; AST:  if (1)
 | 
			
		||||
;
 | 
			
		||||
; AST:      if (N >= 1) {
 | 
			
		||||
; AST:        Stmt_sw_bb(0);
 | 
			
		||||
; AST:        if (N >= 2) {
 | 
			
		||||
; AST:          Stmt_sw_bb_1(1);
 | 
			
		||||
; AST:          if (N >= 3) {
 | 
			
		||||
; AST:            Stmt_sw_bb_5(2);
 | 
			
		||||
; AST:            if (N >= 4)
 | 
			
		||||
; AST:              Stmt_sw_bb_9(3);
 | 
			
		||||
; AST:          }
 | 
			
		||||
; AST:        }
 | 
			
		||||
; AST:      }
 | 
			
		||||
;
 | 
			
		||||
; AST:  else
 | 
			
		||||
; AST:      {  /* original code */ }
 | 
			
		||||
;
 | 
			
		||||
; AST:          if (N >= 1) {
 | 
			
		||||
; AST-NEXT:       Stmt_sw_bb(0);
 | 
			
		||||
; AST-NEXT:       if (N >= 2) {
 | 
			
		||||
; AST-NEXT:         Stmt_sw_bb_1(1);
 | 
			
		||||
; AST-NEXT:         if (N >= 3) {
 | 
			
		||||
; AST-NEXT:           Stmt_sw_bb_5(2);
 | 
			
		||||
; AST-NEXT:           if (N >= 4)
 | 
			
		||||
; AST-NEXT:             Stmt_sw_bb_9(3);
 | 
			
		||||
; AST-NEXT:         }
 | 
			
		||||
; AST-NEXT:       }
 | 
			
		||||
; AST-NEXT:     }
 | 
			
		||||
;
 | 
			
		||||
; AST:      else
 | 
			
		||||
; AST-NEXT:     {  /* original code */ }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @f(i32* %A, i32 %N) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,33 +16,44 @@
 | 
			
		|||
;      }
 | 
			
		||||
;      }
 | 
			
		||||
;    }
 | 
			
		||||
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [c, N] -> { Stmt_for_body[i0] : c = -1 and i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [c, N] -> { Stmt_for_body[i0] -> [1, i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [c, N] -> { Stmt_for_body[i0] -> MemRef_A[-1 + N - i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [c, N] -> { Stmt_for_body[i0] -> MemRef_A[N - i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [c, N] -> { Stmt_for_body[i0] -> MemRef_A[N - i0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_for_body_7
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [c, N] -> { Stmt_for_body_7[i0] : c = 1 and i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [c, N] -> { Stmt_for_body_7[i0] -> [0, i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [c, N] -> { Stmt_for_body_7[i0] -> MemRef_A[i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [c, N] -> { Stmt_for_body_7[i0] -> MemRef_A[1 + i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [c, N] -> { Stmt_for_body_7[i0] -> MemRef_A[1 + i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
; AST:      if (1)
 | 
			
		||||
;
 | 
			
		||||
; CHECK:    Statements {
 | 
			
		||||
; CHECK:      Stmt_for_body
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [c, N] -> { Stmt_for_body[i0] : c = -1 and i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [c, N] -> { Stmt_for_body[i0] -> [1, i0] };
 | 
			
		||||
; CHECK:      Stmt_for_body_7
 | 
			
		||||
; CHECK:            Domain :=
 | 
			
		||||
; CHECK:                [c, N] -> { Stmt_for_body_7[i0] : c = 1 and i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK:            Schedule :=
 | 
			
		||||
; CHECK:                [c, N] -> { Stmt_for_body_7[i0] -> [0, i0] };
 | 
			
		||||
; CHECK:    }
 | 
			
		||||
;
 | 
			
		||||
; AST:  if (1)
 | 
			
		||||
;
 | 
			
		||||
; AST:      if (c == 1) {
 | 
			
		||||
; AST:        for (int c0 = 0; c0 < N; c0 += 1)
 | 
			
		||||
; AST:          Stmt_for_body_7(c0);
 | 
			
		||||
; AST:      } else if (c == -1)
 | 
			
		||||
; AST:        for (int c0 = 0; c0 < N; c0 += 1)
 | 
			
		||||
; AST:          Stmt_for_body(c0);
 | 
			
		||||
;
 | 
			
		||||
; AST:  else
 | 
			
		||||
; AST:      {  /* original code */ }
 | 
			
		||||
;
 | 
			
		||||
; AST:          if (c == 1) {
 | 
			
		||||
; AST-NEXT:       for (int c0 = 0; c0 < N; c0 += 1)
 | 
			
		||||
; AST-NEXT:         Stmt_for_body_7(c0);
 | 
			
		||||
; AST-NEXT:     } else if (c == -1)
 | 
			
		||||
; AST-NEXT:       for (int c0 = 0; c0 < N; c0 += 1)
 | 
			
		||||
; AST-NEXT:         Stmt_for_body(c0);
 | 
			
		||||
;
 | 
			
		||||
; AST:      else
 | 
			
		||||
; AST-NEXT:     {  /* original code */ }
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
 | 
			
		||||
define void @f(i32* %A, i32 %c, i32 %N) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,12 +11,36 @@
 | 
			
		|||
;   }
 | 
			
		||||
; }
 | 
			
		||||
 | 
			
		||||
; CHECK-LABEL: Function: f
 | 
			
		||||
;
 | 
			
		||||
; CHECK:       Statements {
 | 
			
		||||
; CHECK-NEXT:      Stmt_for_j
 | 
			
		||||
; CHECK-NEXT:          Domain :=
 | 
			
		||||
; CHECK-NEXT:              [N] -> { Stmt_for_j[i0, i1] : i0 >= 0 and i0 <= -1 + N and i1 >= 0 and i1 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:          Schedule :=
 | 
			
		||||
; CHECK-NEXT:              [N] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              [N] -> { Stmt_for_j[i0, i1] -> MemRef_init[] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:              [N] -> { Stmt_for_j[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
; CHECK-NEXT:  }
 | 
			
		||||
;
 | 
			
		||||
; CHECK-LABEL: Function: g
 | 
			
		||||
;
 | 
			
		||||
; CHECK:       Statements {
 | 
			
		||||
; CHECK-NEXT:      Stmt_for_j
 | 
			
		||||
; CHECK-NEXT:          Domain :=
 | 
			
		||||
; CHECK-NEXT:              [N] -> { Stmt_for_j[i0, i1] : i0 >= 0 and i0 <= -1 + N and i1 >= 0 and i1 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:          Schedule :=
 | 
			
		||||
; CHECK-NEXT:              [N] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
 | 
			
		||||
; CHECK-NEXT:          ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:              [N] -> { Stmt_for_j[i0, i1] -> MemRef_init[] };
 | 
			
		||||
; CHECK-NEXT:          MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:              [N] -> { Stmt_for_j[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
; CHECK-NEXT:  }
 | 
			
		||||
 | 
			
		||||
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"
 | 
			
		||||
 | 
			
		||||
; CHECK-LABEL: Function: f
 | 
			
		||||
; CHECK:          ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:         MemRef_init_ptr[0]
 | 
			
		||||
; CHECK-NEXT:     Execution Context: [N] -> {  : N >= 1 or N <= -1 }
 | 
			
		||||
 | 
			
		||||
define void @f(i64* noalias %A, i64 %N, i64* noalias %init_ptr) nounwind {
 | 
			
		||||
entry:
 | 
			
		||||
| 
						 | 
				
			
			@ -28,17 +52,11 @@ for.i:
 | 
			
		|||
  br label %entry.next
 | 
			
		||||
 | 
			
		||||
entry.next:
 | 
			
		||||
; CHECK-NOT:      Stmt_entry_next
 | 
			
		||||
  %init = load i64, i64* %init_ptr
 | 
			
		||||
  br label %for.j
 | 
			
		||||
 | 
			
		||||
for.j:
 | 
			
		||||
  %indvar.j = phi i64 [ 0, %entry.next ], [ %indvar.j.next, %for.j ]
 | 
			
		||||
; CHECK:      Stmt_for_j
 | 
			
		||||
; CHECK:          ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:         [N] -> { Stmt_for_j[i0, i1] -> MemRef_init[] };
 | 
			
		||||
; CHECK:          MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:         [N] -> { Stmt_for_j[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
  %init_plus_two = add i64 %init, 2
 | 
			
		||||
  %scevgep = getelementptr i64, i64* %A, i64 %indvar.j
 | 
			
		||||
  store i64 %init_plus_two, i64* %scevgep
 | 
			
		||||
| 
						 | 
				
			
			@ -54,10 +72,6 @@ return:
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; CHECK-LABEL: Function: g
 | 
			
		||||
; CHECK:          ReadAccess :=       [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:         MemRef_init_ptr[0]
 | 
			
		||||
; CHECK-NEXT:     Execution Context: [N] -> {  : N >= 1 or N <= -1 }
 | 
			
		||||
define void @g(i64* noalias %A, i64 %N, i64* noalias %init_ptr) nounwind {
 | 
			
		||||
entry:
 | 
			
		||||
  br label %for.i
 | 
			
		||||
| 
						 | 
				
			
			@ -68,19 +82,13 @@ for.i:
 | 
			
		|||
  br label %entry.next
 | 
			
		||||
 | 
			
		||||
entry.next:
 | 
			
		||||
; CHECK-NOT:      Stmt_entry_next
 | 
			
		||||
  %init = load i64, i64* %init_ptr
 | 
			
		||||
  br label %for.j
 | 
			
		||||
 | 
			
		||||
for.j:
 | 
			
		||||
; CHECK:      Stmt_for_j
 | 
			
		||||
  %indvar.j = phi i64 [ 0, %entry.next ], [ %indvar.j.next, %for.j ]
 | 
			
		||||
  %scevgep = getelementptr i64, i64* %A, i64 %indvar.j
 | 
			
		||||
  store i64 %init, i64* %scevgep
 | 
			
		||||
; CHECK:          ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]
 | 
			
		||||
; CHECK-NEXT:         [N] -> { Stmt_for_j[i0, i1] -> MemRef_init[] };
 | 
			
		||||
; CHECK:          MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:         [N] -> { Stmt_for_j[i0, i1] -> MemRef_A[i1] };
 | 
			
		||||
  %indvar.j.next = add nsw i64 %indvar.j, 1
 | 
			
		||||
  %exitcond.j = icmp eq i64 %indvar.j.next, %N
 | 
			
		||||
  br i1 %exitcond.j, label %for.i.end, label %for.j
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,24 +1,26 @@
 | 
			
		|||
; RUN: opt %loadPolly -polly-scops -analyze \
 | 
			
		||||
; RUN: < %s | FileCheck %s
 | 
			
		||||
 | 
			
		||||
; CHECK: Stmt_loop_1
 | 
			
		||||
; CHECK:    Domain :=
 | 
			
		||||
; CHECK:      [N] -> { Stmt_loop_1[i0] : 
 | 
			
		||||
; CHECK-DAG:     i0 >= 0
 | 
			
		||||
; CHECK-DAG:   and
 | 
			
		||||
; CHECK-DAG:     i0 <= 101
 | 
			
		||||
; CHECK-DAG:   and
 | 
			
		||||
; CHECK-DAG:     N <= 100
 | 
			
		||||
; CHECK-DAG:     };
 | 
			
		||||
; CHECK: Stmt_loop_2
 | 
			
		||||
; CHECK:    Domain :=
 | 
			
		||||
; CHECK:      [N] -> { Stmt_loop_2[i0] :
 | 
			
		||||
; CHECK-DAG:     i0 >= 0
 | 
			
		||||
; CHECK-DAG:   and
 | 
			
		||||
; CHECK-DAG:     i0 <= 301
 | 
			
		||||
; CHECK-DAG:   and
 | 
			
		||||
; CHECK-DAG:     N <= 100
 | 
			
		||||
; CHECK-DAG:     };
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_loop_1
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_loop_1[i0] : N <= 100 and i0 <= 101 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_loop_1[i0] -> [0, i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_loop_1[i0] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_loop_1[i0] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:     Stmt_loop_2
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_loop_2[i0] : N <= 100 and i0 <= 301 and i0 >= 0 };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_loop_2[i0] -> [1, i0] };
 | 
			
		||||
; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_loop_2[i0] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [N] -> { Stmt_loop_2[i0] -> MemRef_A[0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
 | 
			
		||||
define void @foo(float* %A, i64 %N) {
 | 
			
		||||
entry:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,19 +32,16 @@ return:
 | 
			
		|||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; CHECK: Assumed Context:
 | 
			
		||||
; CHECK:   {  :  }
 | 
			
		||||
 | 
			
		||||
; CHECK:  Stmt_store
 | 
			
		||||
; CHECK:        Domain :=
 | 
			
		||||
; CHECK:            [P, N] -> { Stmt_store[i0] :
 | 
			
		||||
; CHECK-DAG:          i0 >= 0
 | 
			
		||||
; CHECK-DAG:        and
 | 
			
		||||
; CHECK-DAG:          i0 <= -1 + N
 | 
			
		||||
; CHECK-DAG:        and
 | 
			
		||||
; CHECK-DAG:          P >= 42
 | 
			
		||||
; CHECK:                   };
 | 
			
		||||
; CHECK:        Schedule :=
 | 
			
		||||
; CHECK:            [P, N] -> { Stmt_store[i0] -> [i0] };
 | 
			
		||||
; CHECK:        MustWriteAccess := [Reduction Type: NONE]
 | 
			
		||||
; CHECK:            [P, N] -> { Stmt_store[i0] -> MemRef_a[i0] };
 | 
			
		||||
; CHECK:      Assumed Context:
 | 
			
		||||
; CHECK-NEXT: [P, N] -> {  :  }
 | 
			
		||||
;
 | 
			
		||||
; CHECK:      Statements {
 | 
			
		||||
; CHECK-NEXT:     Stmt_store
 | 
			
		||||
; CHECK-NEXT:         Domain :=
 | 
			
		||||
; CHECK-NEXT:             [P, N] -> { Stmt_store[i0] : P >= 42 and i0 >= 0 and i0 <= -1 + N };
 | 
			
		||||
; CHECK-NEXT:         Schedule :=
 | 
			
		||||
; CHECK-NEXT:             [P, N] -> { Stmt_store[i0] -> [i0] };
 | 
			
		||||
; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
 | 
			
		||||
; CHECK-NEXT:             [P, N] -> { Stmt_store[i0] -> MemRef_a[i0] };
 | 
			
		||||
; CHECK-NEXT: }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,15 +9,11 @@
 | 
			
		|||
;     a[i] = i;
 | 
			
		||||
; }
 | 
			
		||||
 | 
			
		||||
; CHECK: Context:
 | 
			
		||||
; CHECK:    [N] -> {  :
 | 
			
		||||
; CHECK-DAG:     N >= -9223372036854775808
 | 
			
		||||
; CHECK-DAG:   and
 | 
			
		||||
; CHECK-DAG:     N <= 9223372036854775807
 | 
			
		||||
; CHECK:           }
 | 
			
		||||
; CHECK:      Context:
 | 
			
		||||
; CHECK-NEXT: [N] -> {  : N <= 9223372036854775807 and N >= -9223372036854775808 }
 | 
			
		||||
 | 
			
		||||
; CTX: Context:
 | 
			
		||||
; CTX:    [N] -> {  : N = 1024 }
 | 
			
		||||
; CTX:      Context:
 | 
			
		||||
; CTX-NEXT: [N] -> {  : N = 1024 }
 | 
			
		||||
 | 
			
		||||
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"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue