Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix a type mismatch assert in SCEV division
An assert was triggered when attempting to create a new SCEV with operands of different types in the visitAddRecExpr. In this test case, the operand types of the numerator and denominator are different. The SCEV division code should generate a conservative answer when this happens. Differential Revision: http://reviews.llvm.org/D9021 llvm-svn: 235511
- Loading branch information
Brendon Cahoon
committed
Apr 22, 2015
1 parent
6078597
commit f9751ad
Showing
2 changed files
with
37 additions
and
0 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,29 @@ | ||
; RUN: opt < %s -analyze -delinearize | ||
; REQUIRES: asserts | ||
|
||
; Test that SCEV divide code doesn't crash when attempting to create a SCEV | ||
; with operands of different types. In this case, the visitAddRecExpr | ||
; function tries to create an AddRec where the start and step are different | ||
; types. | ||
|
||
target datalayout = "e-m:e-p:32:32-i64:64-a:0-v32:32-n16:32" | ||
|
||
define fastcc void @test() { | ||
entry: | ||
%0 = load i16, i16* undef, align 2 | ||
%conv21 = zext i16 %0 to i32 | ||
br label %for.cond7.preheader | ||
|
||
for.cond7.preheader: | ||
%p1.022 = phi i8* [ undef, %entry ], [ %add.ptr, %for.end ] | ||
br label %for.body11 | ||
|
||
for.body11: | ||
%arrayidx.phi = phi i8* [ %p1.022, %for.cond7.preheader ], [ undef, %for.body11 ] | ||
store i8 undef, i8* %arrayidx.phi, align 1 | ||
br i1 undef, label %for.body11, label %for.end | ||
|
||
for.end: | ||
%add.ptr = getelementptr inbounds i8, i8* %p1.022, i32 %conv21 | ||
br label %for.cond7.preheader | ||
} |