if (blockNeedsPredication(ST->getParent(), TheLoop, DT))
Loc.AATags.TBAA = nullptr;
- // SCEV does not look through non-header PHIs inside the loop. Such phis
- // can be analyzed by adding separate accesses for each incoming pointer
- // value.
- auto *PN = dyn_cast<PHINode>(Loc.Ptr);
- if (PN && TheLoop->contains(PN->getParent()) &&
- PN->getParent() != TheLoop->getHeader()) {
- for (const Use &Inc : PN->incoming_values()) {
- MemoryLocation NewLoc = Loc.getWithNewPtr(Inc);
- Accesses.addStore(NewLoc);
- }
- } else
- Accesses.addStore(Loc);
+ Accesses.addStore(Loc);
}
}
if (blockNeedsPredication(LD->getParent(), TheLoop, DT))
Loc.AATags.TBAA = nullptr;
- // SCEV does not look through non-header PHIs inside the loop. Such phis can
- // be analyzed by adding separate accesses for each incoming pointer value.
- auto *PN = dyn_cast<PHINode>(Loc.Ptr);
- if (PN && TheLoop->contains(PN->getParent()) &&
- PN->getParent() != TheLoop->getHeader()) {
- for (const Use &Inc : PN->incoming_values()) {
- MemoryLocation NewLoc = Loc.getWithNewPtr(Inc);
- Accesses.addLoad(NewLoc, IsReadOnlyPtr);
- }
- } else
- Accesses.addLoad(Loc, IsReadOnlyPtr);
+ Accesses.addLoad(Loc, IsReadOnlyPtr);
}
// If we write (or read-write) to a single destination and there are no
define i32 @load_with_pointer_phi_no_runtime_checks(%s1* %data) {
; CHECK-LABEL: load_with_pointer_phi_no_runtime_checks
; CHECK-NEXT: loop.header:
-; CHECK-NEXT: Memory dependences are safe
+; CHECK-NEXT: Report: cannot identify array bounds
;
entry:
br label %loop.header
define i32 @store_with_pointer_phi_no_runtime_checks(%s1* %data) {
; CHECK-LABEL: 'store_with_pointer_phi_no_runtime_checks'
; CHECK-NEXT: loop.header:
-; CHECK-NEXT: Memory dependences are safe
+; CHECK-NEXT: Report: cannot identify array bounds
;
entry:
br label %loop.header
define i32 @store_with_pointer_phi_runtime_checks(double* %A, double* %B, double* %C) {
; CHECK-LABEL: 'store_with_pointer_phi_runtime_checks'
; CHECK-NEXT: loop.header:
-; CHECK-NEXT: Memory dependences are safe with run-time checks
-; CHECK: Run-time memory checks:
-; CHECK-NEXT: Check 0:
-; CHECK-NEXT: Comparing group ([[GROUP_C:.+]]):
-; CHECK-NEXT: %gep.2 = getelementptr inbounds double, double* %C, i64 %iv
-; CHECK-NEXT: Against group ([[GROUP_B:.+]]):
-; CHECK-NEXT: %gep.1 = getelementptr inbounds double, double* %B, i64 %iv
-; CHECK-NEXT: Check 1:
-; CHECK-NEXT: Comparing group ([[GROUP_C]]):
-; CHECK-NEXT: %gep.2 = getelementptr inbounds double, double* %C, i64 %iv
-; CHECK-NEXT: Against group ([[GROUP_A:.+]]):
-; CHECK-NEXT: %arrayidx = getelementptr inbounds double, double* %A, i64 %iv
-; CHECK-NEXT: Check 2:
-; CHECK-NEXT: Comparing group ([[GROUP_B]]):
-; CHECK-NEXT: %gep.1 = getelementptr inbounds double, double* %B, i64 %iv
-; CHECK-NEXT: Against group ([[GROUP_A]]):
-; CHECK-NEXT: %arrayidx = getelementptr inbounds double, double* %A, i64 %iv
+; CHECK-NEXT: Report: cannot identify array bounds
;
entry:
br label %loop.header
define i32 @load_with_pointer_phi_no_runtime_checks(%s1* %data) {
; CHECK-LABEL: @load_with_pointer_phi_no_runtime_checks
-; CHECK-NOT: memcheck
-; CHECK: vector.body:
+; CHECK-NOT: vector.body
;
entry:
br label %loop.header
define i32 @store_with_pointer_phi_no_runtime_checks(%s1* %data) {
; CHECK-LABEL: @store_with_pointer_phi_no_runtime_checks
-; CHECK-NOT: memcheck
-; CHECK: vector.body
+; CHECK-NOT: vector.body
;
entry:
br label %loop.header
define i32 @store_with_pointer_phi_runtime_checks(double* %A, double* %B, double* %C) {
; CHECK-LABEL: @store_with_pointer_phi_runtime_checks
-; CHECK: memcheck
-; CHECK: vector.body
+; CHECK-NOT: vector.body
;
entry:
br label %loop.header