forked from djg/llvm-project-20170507
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
------------------------------------------------------------------------ r312509 | dannyb | 2017-09-04 19:17:42 -0700 (Mon, 04 Sep 2017) | 1 line NewGVN: Fix PR 34452 by passing instruction all the way down when we do aggregate value simplification ------------------------------------------------------------------------
- Loading branch information
Showing
2 changed files
with
58 additions
and
7 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,49 @@ | ||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py | ||
; RUN: opt -newgvn -S < %s | FileCheck %s | ||
;; Ensure we don't crash when simplifying aggregate value expressions | ||
source_filename = "bugpoint-output-09f7a24.bc" | ||
|
||
@WHOLELINE = external local_unnamed_addr global i32, align 4 | ||
|
||
; Function Attrs: nounwind uwtable | ||
define void @sgrep() local_unnamed_addr #0 { | ||
; CHECK-LABEL: @sgrep( | ||
; CHECK-NEXT: entry: | ||
; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @WHOLELINE, align 4, !tbaa !1 | ||
; CHECK-NEXT: [[TOBOOL:%.*]] = icmp eq i32 [[TMP0]], 0 | ||
; CHECK-NEXT: [[DOT:%.*]] = select i1 [[TOBOOL]], i32 2048, i32 2047 | ||
; CHECK-NEXT: br label [[WHILE_BODY_US:%.*]] | ||
; CHECK: while.body.us: | ||
; CHECK-NEXT: [[START_1230_US:%.*]] = phi i32 [ [[DOT]], [[ENTRY:%.*]] ], [ 0, [[WHILE_BODY_US]] ] | ||
; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[START_1230_US]] to i64 | ||
; CHECK-NEXT: [[TMP2:%.*]] = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 0, i64 [[TMP1]]) | ||
; CHECK-NEXT: br label [[WHILE_BODY_US]] | ||
; | ||
entry: | ||
%0 = load i32, i32* @WHOLELINE, align 4, !tbaa !1 | ||
%tobool = icmp eq i32 %0, 0 | ||
%. = select i1 %tobool, i32 2048, i32 2047 | ||
br label %while.body.us | ||
|
||
while.body.us: ; preds = %while.body.us, %entry | ||
%start.1230.us = phi i32 [ %., %entry ], [ 0, %while.body.us ] | ||
%1 = sext i32 %start.1230.us to i64 | ||
%2 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 0, i64 %1) | ||
%.res302 = extractvalue { i64, i1 } %2, 0 | ||
%3 = icmp sge i64 undef, %.res302 | ||
br label %while.body.us | ||
} | ||
|
||
; Function Attrs: nounwind readnone speculatable | ||
declare { i64, i1 } @llvm.sadd.with.overflow.i64(i64, i64) #1 | ||
|
||
attributes #0 = { nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "polly-optimized" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } | ||
attributes #1 = { nounwind readnone speculatable } | ||
|
||
!llvm.ident = !{!0} | ||
|
||
!0 = !{!"clang version 6.0.0 (trunk 311664) (llvm/trunk 311666)"} | ||
!1 = !{!2, !2, i64 0} | ||
!2 = !{!"int", !3, i64 0} | ||
!3 = !{!"omnipotent char", !4, i64 0} | ||
!4 = !{!"Simple C/C++ TBAA"} |