Add a test for r61358, which I forgot to add way back when.
authorOwen Anderson <resistor@mac.com>
Wed, 18 Feb 2009 07:50:22 +0000 (07:50 +0000)
committerOwen Anderson <resistor@mac.com>
Wed, 18 Feb 2009 07:50:22 +0000 (07:50 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64904 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/GVN/2009-02-17-LoadPRECrash.ll [new file with mode: 0644]

diff --git a/test/Transforms/GVN/2009-02-17-LoadPRECrash.ll b/test/Transforms/GVN/2009-02-17-LoadPRECrash.ll
new file mode 100644 (file)
index 0000000..34dc344
--- /dev/null
@@ -0,0 +1,193 @@
+; RUN: llvm-as < %s | opt -gvn -enable-load-pre -disable-output
+
+       %struct.VEC_rtx_base = type { i32, i32, [1 x %struct.rtx_def*] }
+       %struct.VEC_rtx_gc = type { %struct.VEC_rtx_base }
+       %struct.block_symbol = type { [3 x %struct.cgraph_rtl_info], %struct.object_block*, i64 }
+       %struct.cgraph_rtl_info = type { i32 }
+       %struct.object_block = type { %struct.section*, i32, i64, %struct.VEC_rtx_gc*, %struct.VEC_rtx_gc* }
+       %struct.rtvec_def = type { i32, [1 x %struct.rtx_def*] }
+       %struct.rtx_def = type { i16, i8, i8, %struct.u }
+       %struct.section = type { %struct.unnamed_section }
+       %struct.u = type { %struct.block_symbol }
+       %struct.unnamed_section = type { %struct.cgraph_rtl_info, void (i8*)*, i8*, %struct.section* }
+
+declare %struct.rtvec_def* @gen_rtvec(i32, ...)
+
+declare %struct.rtx_def* @plus_constant(%struct.rtx_def*, i64)
+
+declare %struct.rtx_def* @gen_rtx_fmt_Ei(i32, i32, %struct.rtvec_def*, i32)
+
+declare i32 @local_symbolic_operand(%struct.rtx_def*, i32)
+
+define %struct.rtx_def* @legitimize_pic_address(%struct.rtx_def* %orig, %struct.rtx_def* %reg) nounwind {
+entry:
+       %addr = alloca %struct.rtx_def*         ; <%struct.rtx_def**> [#uses=5]
+       %iftmp.1532 = alloca %struct.rtx_def*           ; <%struct.rtx_def**> [#uses=3]
+       store %struct.rtx_def* %orig, %struct.rtx_def** null
+       %0 = load %struct.rtx_def** null, align 4               ; <%struct.rtx_def*> [#uses=0]
+       br i1 false, label %bb96, label %bb59
+
+bb59:          ; preds = %entry
+       %1 = load %struct.rtx_def** %addr, align 4              ; <%struct.rtx_def*> [#uses=1]
+       %2 = call i32 @local_symbolic_operand(%struct.rtx_def* %1, i32 0) nounwind              ; <i32> [#uses=0]
+       br i1 false, label %bb96, label %bb63
+
+bb63:          ; preds = %bb59
+       br i1 false, label %bb64, label %bb74
+
+bb64:          ; preds = %bb63
+       br i1 false, label %bb72, label %bb65
+
+bb65:          ; preds = %bb64
+       br label %bb72
+
+bb72:          ; preds = %bb65, %bb64
+       br label %bb74
+
+bb74:          ; preds = %bb72, %bb63
+       br i1 false, label %bb75, label %bb76
+
+bb75:          ; preds = %bb74
+       br label %bb76
+
+bb76:          ; preds = %bb75, %bb74
+       br i1 false, label %bb77, label %bb84
+
+bb77:          ; preds = %bb76
+       %3 = getelementptr [1 x %struct.cgraph_rtl_info]* null, i32 0, i32 0            ; <%struct.cgraph_rtl_info*> [#uses=0]
+       unreachable
+
+bb84:          ; preds = %bb76
+       br i1 false, label %bb85, label %bb86
+
+bb85:          ; preds = %bb84
+       br label %bb87
+
+bb86:          ; preds = %bb84
+       br label %bb87
+
+bb87:          ; preds = %bb86, %bb85
+       %4 = call %struct.rtx_def* @gen_rtx_fmt_Ei(i32 16, i32 0, %struct.rtvec_def* null, i32 1) nounwind              ; <%struct.rtx_def*> [#uses=0]
+       br i1 false, label %bb89, label %bb90
+
+bb89:          ; preds = %bb87
+       br label %bb91
+
+bb90:          ; preds = %bb87
+       br label %bb91
+
+bb91:          ; preds = %bb90, %bb89
+       br i1 false, label %bb92, label %bb93
+
+bb92:          ; preds = %bb91
+       br label %bb94
+
+bb93:          ; preds = %bb91
+       br label %bb94
+
+bb94:          ; preds = %bb93, %bb92
+       unreachable
+
+bb96:          ; preds = %bb59, %entry
+       %5 = load %struct.rtx_def** %addr, align 4              ; <%struct.rtx_def*> [#uses=1]
+       %6 = getelementptr %struct.rtx_def* %5, i32 0, i32 0            ; <i16*> [#uses=1]
+       %7 = load i16* %6, align 2              ; <i16> [#uses=0]
+       br i1 false, label %bb147, label %bb97
+
+bb97:          ; preds = %bb96
+       %8 = load %struct.rtx_def** %addr, align 4              ; <%struct.rtx_def*> [#uses=0]
+       br i1 false, label %bb147, label %bb99
+
+bb99:          ; preds = %bb97
+       unreachable
+
+bb147:         ; preds = %bb97, %bb96
+       %9 = load %struct.rtx_def** %addr, align 4              ; <%struct.rtx_def*> [#uses=1]
+       %10 = getelementptr %struct.rtx_def* %9, i32 0, i32 0           ; <i16*> [#uses=1]
+       %11 = load i16* %10, align 2            ; <i16> [#uses=0]
+       br i1 false, label %bb164, label %bb148
+
+bb148:         ; preds = %bb147
+       br i1 false, label %bb164, label %bb149
+
+bb149:         ; preds = %bb148
+       br i1 false, label %bb150, label %bb152
+
+bb150:         ; preds = %bb149
+       unreachable
+
+bb152:         ; preds = %bb149
+       br label %bb164
+
+bb164:         ; preds = %bb152, %bb148, %bb147
+       %12 = getelementptr [1 x %struct.cgraph_rtl_info]* null, i32 0, i32 1           ; <%struct.cgraph_rtl_info*> [#uses=0]
+       br i1 false, label %bb165, label %bb166
+
+bb165:         ; preds = %bb164
+       br label %bb167
+
+bb166:         ; preds = %bb164
+       br label %bb167
+
+bb167:         ; preds = %bb166, %bb165
+       br i1 false, label %bb211, label %bb168
+
+bb168:         ; preds = %bb167
+       br i1 false, label %bb211, label %bb170
+
+bb170:         ; preds = %bb168
+       br i1 false, label %bb172, label %bb181
+
+bb172:         ; preds = %bb170
+       br i1 false, label %bb179, label %bb174
+
+bb174:         ; preds = %bb172
+       br i1 false, label %bb177, label %bb175
+
+bb175:         ; preds = %bb174
+       br i1 false, label %bb177, label %bb176
+
+bb176:         ; preds = %bb175
+       br label %bb178
+
+bb177:         ; preds = %bb175, %bb174
+       br label %bb178
+
+bb178:         ; preds = %bb177, %bb176
+       br label %bb180
+
+bb179:         ; preds = %bb172
+       br label %bb180
+
+bb180:         ; preds = %bb179, %bb178
+       br label %bb181
+
+bb181:         ; preds = %bb180, %bb170
+       %13 = call %struct.rtvec_def* (i32, ...)* @gen_rtvec(i32 1, %struct.rtx_def* null) nounwind             ; <%struct.rtvec_def*> [#uses=0]
+       unreachable
+
+bb211:         ; preds = %bb168, %bb167
+       %14 = load %struct.rtx_def** %addr, align 4             ; <%struct.rtx_def*> [#uses=0]
+       %15 = getelementptr [1 x %struct.cgraph_rtl_info]* null, i32 0, i32 0           ; <%struct.cgraph_rtl_info*> [#uses=0]
+       store %struct.rtx_def* null, %struct.rtx_def** null, align 4
+       br i1 false, label %bb212, label %bb213
+
+bb212:         ; preds = %bb211
+       store %struct.rtx_def* null, %struct.rtx_def** %iftmp.1532, align 4
+       br label %bb214
+
+bb213:         ; preds = %bb211
+       store %struct.rtx_def* null, %struct.rtx_def** %iftmp.1532, align 4
+       br label %bb214
+
+bb214:         ; preds = %bb213, %bb212
+       %16 = bitcast %struct.block_symbol* null to [1 x %struct.cgraph_rtl_info]*              ; <[1 x %struct.cgraph_rtl_info]*> [#uses=1]
+       %17 = getelementptr [1 x %struct.cgraph_rtl_info]* %16, i32 0, i32 1            ; <%struct.cgraph_rtl_info*> [#uses=0]
+       %18 = load %struct.rtx_def** %iftmp.1532, align 4               ; <%struct.rtx_def*> [#uses=0]
+       %19 = getelementptr %struct.rtx_def* null, i32 0, i32 3         ; <%struct.u*> [#uses=1]
+       %20 = getelementptr %struct.u* %19, i32 0, i32 0                ; <%struct.block_symbol*> [#uses=1]
+       %21 = bitcast %struct.block_symbol* %20 to [1 x i64]*           ; <[1 x i64]*> [#uses=1]
+       %22 = getelementptr [1 x i64]* %21, i32 0, i32 0                ; <i64*> [#uses=0]
+       %23 = call %struct.rtx_def* @plus_constant(%struct.rtx_def* null, i64 0) nounwind               ; <%struct.rtx_def*> [#uses=0]
+       unreachable
+}