1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-18 18:42:46 +02:00
llvm-mirror/test/Transforms/SCCP/pr27712.ll
David Majnemer 7230d61b65 [SCCP] Resolve shifts beyond the bitwidth to undef
Shifts beyond the bitwidth are undef but SCCP resolved them to zero.
Instead, DTRT and resolve them to undef.

This reimplements the transform which caused PR27712.

llvm-svn: 269269
2016-05-12 03:07:40 +00:00

31 lines
682 B
LLVM

; RUN: opt -sccp -S < %s | FileCheck %s
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define i32 @main() {
entry:
br label %lbl_1154
lbl_1154:
%b0.0 = phi i32 [ -119, %entry ], [ 0, %lbl_1154 ]
%cmp11 = icmp slt i32 %b0.0, 0
%shl.op = shl i32 33554432, %b0.0
%cmp1445 = icmp ult i32 %shl.op, 33554432
%cmp14 = or i1 %cmp11, %cmp1445
br i1 %cmp14, label %lbl_1154, label %if.end19
if.end19:
br i1 %cmp11, label %if.then22, label %cleanup26
if.then22:
tail call void @abort()
unreachable
cleanup26:
ret i32 %shl.op
}
; CHECK-LABEL: define i32 @main(
; CHECK-NOT: ret i32 undef
declare void @abort()