Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[MSSA] Fix PR28880 by fixing use optimizer's lower bound tracking beh…
…avior. Summary: In the use optimizer, we need to keep of whether the lower bound still dominates us or else we may decide a lower bound is still valid when it is not due to intervening pushes/pops. Fixes PR28880 (and probably a bunch of other things). Reviewers: george.burgess.iv Subscribers: MatzeB, llvm-commits, sebpop Differential Revision: https://reviews.llvm.org/D23237 llvm-svn: 277978
- Loading branch information
Showing
2 changed files
with
67 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s | ||
; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s | ||
|
||
; This testcase is reduced from SingleSource/Benchmarks/Misc/fbench.c | ||
; It is testing to make sure that the MemorySSA use optimizer | ||
; comes up with right answers when dealing with multiple MemoryLocations | ||
; over different blocks. See PR28880 for more details. | ||
@global = external hidden unnamed_addr global double, align 8 | ||
@global.1 = external hidden unnamed_addr global double, align 8 | ||
|
||
; Function Attrs: nounwind ssp uwtable | ||
define hidden fastcc void @hoge() unnamed_addr #0 { | ||
bb: | ||
br i1 undef, label %bb1, label %bb2 | ||
|
||
bb1: ; preds = %bb | ||
; These accesses should not conflict. | ||
; CHECK: 1 = MemoryDef(liveOnEntry) | ||
; 1 = MemoryDef(liveOnEntry) | ||
; CHECK-NEXT: store double undef, double* @global, align 8 | ||
store double undef, double* @global, align 8 | ||
; CHECK: MemoryUse(liveOnEntry) | ||
; MemoryUse(liveOnEntry) | ||
; CHECK-NEXT: %tmp = load double, double* @global.1, align 8 | ||
%tmp = load double, double* @global.1, align 8 | ||
unreachable | ||
|
||
bb2: ; preds = %bb | ||
br label %bb3 | ||
|
||
bb3: ; preds = %bb2 | ||
br i1 undef, label %bb4, label %bb6 | ||
|
||
bb4: ; preds = %bb3 | ||
; These accesses should conflict. | ||
; CHECK: 2 = MemoryDef(liveOnEntry) | ||
; 2 = MemoryDef(liveOnEntry) | ||
; CHECK-NEXT: store double 0.000000e+00, double* @global.1, align 8 | ||
store double 0.000000e+00, double* @global.1, align 8 | ||
; CHECK: MemoryUse(2) | ||
; MemoryUse(2) | ||
; CHECK-NEXT: %tmp5 = load double, double* @global.1, align 8 | ||
%tmp5 = load double, double* @global.1, align 8 | ||
unreachable | ||
|
||
bb6: ; preds = %bb3 | ||
unreachable | ||
} | ||
|
||
attributes #0 = { nounwind ssp uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="core2" "target-features"="+cx16,+fxsr,+mmx,+sse,+sse2,+sse3,+ssse3" "unsafe-fp-math"="false" "use-soft-float"="false" } | ||
|