1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 20:43:44 +02:00
llvm-mirror/test/CodeGen/X86/sunkaddr-ext.ll
Jim Grosbach 88bf32af3b Fix for incorrect address sinking in the presence of potential overflows.
In some cases it is possible for CGP to attempt to reuse a base address from
another basic block. In those cases we have to be sure that all the address
math was either done at the same bit width, or that none of it overflowed
before it was extended.

Patch by Louis Gerbarg <lgg@apple.com>

rdar://16307442

llvm-svn: 204833
2014-03-26 17:27:01 +00:00

27 lines
789 B
LLVM

; RUN: llc < %s | FileCheck %s
; Test to make sure that if math that can roll over has been used we don't
; use the potential overflow as the basis for an address calculation later by
; sinking it into a different basic block.
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.9.0"
; Function Attrs: nounwind ssp uwtable
define void @test_sink(i8* %arg1, i32 %arg2, i8 %arg3) #0 {
%tmp1 = add i32 -2147483648, %arg2
%tmp2 = add i32 -2147483648, %tmp1
%tmp3 = getelementptr i8* %arg1, i32 %arg2
br label %bb1
bb1:
%tmp4 = getelementptr i8* %arg1, i32 %tmp2
store i8 %arg3, i8* %tmp4
ret void;
}
; CHECK-LABEL: test_sink:
; CHECK: movslq %esi, [[TEMP:%[a-z0-9]+]]
; CHECK: movb %dl, (%rdi,[[TEMP]])
; CHECK: retq