diff options
author | Dan Gohman <gohman@apple.com> | 2009-01-21 15:17:51 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2009-01-21 15:17:51 +0000 |
commit | 764fd0cbc8a0ee512a9352cfeb123e8778542d28 (patch) | |
tree | cea2b7ab9429b724530f208946fbd810d48b5531 /test | |
parent | 1ef4d8f7ee60f724eff2175ed22f75a60eb8d50d (diff) | |
download | external_llvm-764fd0cbc8a0ee512a9352cfeb123e8778542d28.zip external_llvm-764fd0cbc8a0ee512a9352cfeb123e8778542d28.tar.gz external_llvm-764fd0cbc8a0ee512a9352cfeb123e8778542d28.tar.bz2 |
Simplify ReduceLoadWidth's logic: it doesn't need several different
special cases after producing the new reduced-width load, because the
new load already has the needed adjustments built into it. This fixes
several bugs due to the special cases, including PR3317.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62692 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGen/X86/pr3317.ll | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/test/CodeGen/X86/pr3317.ll b/test/CodeGen/X86/pr3317.ll new file mode 100644 index 0000000..aa5ee7c --- /dev/null +++ b/test/CodeGen/X86/pr3317.ll @@ -0,0 +1,46 @@ +; RUN: llvm-as < %s | llc -march=x86 +; PR3317 + + %ArraySInt16 = type { %JavaObject, i8*, [0 x i16] } + %ArraySInt8 = type { %JavaObject, i8*, [0 x i8] } + %Attribut = type { %ArraySInt16*, i32, i32 } + %CacheNode = type { i8*, %JavaCommonClass*, %CacheNode*, %Enveloppe* } + %Enveloppe = type { %CacheNode*, %ArraySInt16*, %ArraySInt16*, i8, %JavaClass*, %CacheNode } + %JavaArray = type { %JavaObject, i8* } + %JavaClass = type { %JavaCommonClass, i32, %VT*, [1 x %TaskClassMirror], i8*, %JavaField*, i16, %JavaField*, i16, %JavaMethod*, i16, %JavaMethod*, i16, i8*, %ArraySInt8*, i8*, %Attribut*, i16, %JavaClass**, i16, %JavaClass*, i16, i8, i32, i32, i8*, void (i8*)* } + %JavaCommonClass = type { %JavaCommonClass**, i32, [1 x %JavaObject*], i16, %JavaClass**, i16, %ArraySInt16*, %JavaClass*, i8* } + %JavaField = type { i8*, i16, %ArraySInt16*, %ArraySInt16*, %Attribut*, i16, %JavaClass*, i32, i16, i8* } + %JavaMethod = type { i8*, i16, %Attribut*, i16, %Enveloppe*, i16, %JavaClass*, %ArraySInt16*, %ArraySInt16*, i8, i8*, i32, i8* } + %JavaObject = type { %VT*, %JavaCommonClass*, i8* } + %TaskClassMirror = type { i32, i8* } + %UTF8 = type { %JavaObject, i8*, [0 x i16] } + %VT = type [0 x i32 (...)*] + +declare void @jnjvmNullPointerException() + +define i32 @JnJVM_java_rmi_activation_ActivationGroupID_hashCode__(%JavaObject* nocapture) nounwind { +start: + %1 = getelementptr %JavaObject* %0, i64 1, i32 1 ; <%JavaCommonClass**> [#uses=1] + %2 = load %JavaCommonClass** %1 ; <%JavaCommonClass*> [#uses=4] + %3 = icmp eq %JavaCommonClass* %2, null ; <i1> [#uses=1] + br i1 %3, label %verifyNullExit1, label %verifyNullCont2 + +verifyNullExit1: ; preds = %start + tail call void @jnjvmNullPointerException() + unreachable + +verifyNullCont2: ; preds = %start + %4 = bitcast %JavaCommonClass* %2 to { %JavaObject, i16, i32, i64 }* ; <{ %JavaObject, i16, i32, i64 }*> [#uses=1] + %5 = getelementptr { %JavaObject, i16, i32, i64 }* %4, i64 0, i32 2 ; <i32*> [#uses=1] + %6 = load i32* %5 ; <i32> [#uses=1] + %7 = getelementptr %JavaCommonClass* %2, i64 0, i32 4 ; <%JavaClass***> [#uses=1] + %8 = bitcast %JavaClass*** %7 to i64* ; <i64*> [#uses=1] + %9 = load i64* %8 ; <i64> [#uses=1] + %10 = trunc i64 %9 to i32 ; <i32> [#uses=1] + %11 = getelementptr %JavaCommonClass* %2, i64 0, i32 3 ; <i16*> [#uses=1] + %12 = load i16* %11 ; <i16> [#uses=1] + %13 = sext i16 %12 to i32 ; <i32> [#uses=1] + %14 = xor i32 %10, %6 ; <i32> [#uses=1] + %15 = xor i32 %14, %13 ; <i32> [#uses=1] + ret i32 %15 +} |