llvm-6502/test/CodeGen/Generic/2014-02-05-OpaqueConstants.ll
Juergen Ributzka 58bc0ca37b [DAG] Don't pull the binary operation though the shift if the operands have opaque constants.
During DAGCombine visitShiftByConstant assumes that certain binary operations
with only constant operands can always be folded successfully. This is no longer
true when the constant is opaque. This commit fixes visitShiftByConstant by not
performing the optimization for opaque constants. Otherwise we would end up in
an infinite DAGCombine loop.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200900 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-06 04:09:06 +00:00

20 lines
554 B
LLVM

; Test that opaque constants are not creating an infinite DAGCombine loop
; RUN: llc < %s
; XFAIL: r600, xcore
@a = common global i32* null, align 8
@c = common global i32 0, align 4
@b = common global i32* null, align 8
; Function Attrs: nounwind ssp uwtable
define void @fn() {
store i32* inttoptr (i64 68719476735 to i32*), i32** @a, align 8
%1 = load i32* @c, align 4
%2 = sext i32 %1 to i64
%3 = lshr i64 %2, 12
%4 = and i64 %3, 68719476735
%5 = getelementptr inbounds i32* null, i64 %4
store i32* %5, i32** @b, align 8
ret void
}