From dffb6e5aee9607d78732824f00bf0f4a8a6fba9b Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 15 Sep 2009 18:27:02 +0000 Subject: fix PR4984 by ensuring that fastisel adds properly sign extended GEP displacement values to machineinstrs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81886 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/X86/fast-isel-gep.ll | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'test/CodeGen/X86/fast-isel-gep.ll') diff --git a/test/CodeGen/X86/fast-isel-gep.ll b/test/CodeGen/X86/fast-isel-gep.ll index fb24f19..5b8acec 100644 --- a/test/CodeGen/X86/fast-isel-gep.ll +++ b/test/CodeGen/X86/fast-isel-gep.ll @@ -1,10 +1,9 @@ ; RUN: llc < %s -march=x86-64 -O0 | FileCheck %s --check-prefix=X64 ; RUN: llc < %s -march=x86 -O0 | FileCheck %s --check-prefix=X32 -; PR3181 ; GEP indices are interpreted as signed integers, so they ; should be sign-extended to 64 bits on 64-bit targets. - +; PR3181 define i32 @test1(i32 %t3, i32* %t1) nounwind { %t9 = getelementptr i32* %t1, i32 %t3 ; [#uses=1] %t15 = load i32* %t9 ; [#uses=1] @@ -31,3 +30,24 @@ define i32 @test2(i64 %t3, i32* %t1) nounwind { ; X64: movl (%rsi,%rdi,4), %eax ; X64: ret } + + + +; PR4984 +define i8 @test3(i8* %start) nounwind { +entry: + %A = getelementptr i8* %start, i64 -2 ; [#uses=1] + %B = load i8* %A, align 1 ; [#uses=1] + ret i8 %B + + +; X32: test3: +; X32: movl 4(%esp), %eax +; X32: movb -2(%eax), %al +; X32: ret + +; X64: test3: +; X64: movb -2(%rdi), %al +; X64: ret + +} -- cgit v1.1