[LLVMdev] Non-local DSE optimization
Jakub Staszak
kuba at gcc.gnu.org
Thu Sep 3 10:51:21 PDT 2009
Hi,
It looks like PDT.getRootNode() returns NULL for:
define fastcc void @c974001__lengthy_calculation.
1736(%struct.FRAME.c974001* nocapture %CHAIN.185) noreturn {
entry:
br label %bb
bb:
br label %bb
}
Isn't it a bug in PostDominatorTree?
Please note that this crashes:
opt -postdomtree -debug dom_crash.bc
I think this should be reported as a bug,
-Jakub
On Sep 3, 2009, at 7:05 AM, Duncan Sands wrote:
> Hi Jakub, interesting patch. I ran it over the Ada testsuite and this
> picked up some problems even without enabling dse-ssu. For example,
> "opt -inline -dse -domtree" crashes on the attached testcase.
>
> Ciao,
>
> Duncan.
> ; ModuleID = 'dom_crash.bc'
> target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-
> i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-
> f80:32:32"
> target triple = "i386-pc-linux-gnu"
>
> %struct.FRAME.c974001 = type { i32, i8, void
> (%struct.c974001__timed_calculation*)* }
> %struct.FRAME.c974001__timed_calculationB = type
> { %struct.FRAME.c974001*, i32 }
> %struct.FRAME.c974001__timed_calculation__calculationA = type
> { %struct.system__tasking__async_delays__delay_block }
> %struct.RETURN = type { i32, i32 }
> %struct.ada__exceptions__exception_occurrence = type
> { %struct.system__standard_library__exception_data*, i32, [200 x
> i8], i8, i8, i32, i32, [50 x i32], i32 }
> %struct.c974001__timed_calculation = type
> { %struct.system__tasking__ada_task_control_block* }
> %struct.system__os_interface__pthread_mutex_t = type { i32, i32,
> i32, i32, %struct.RETURN }
> %struct.system__soft_links__tsd = type
> { %struct.system__stack_checking__stack_info, i32, i32,
> %struct.ada__exceptions__exception_occurrence }
> %struct.system__stack_checking__stack_info = type { i32, i32, i32 }
> %struct.system__stack_usage__stack_analyzer = type { [32 x i8], i32,
> i32, i32, i32, i32, i32, i32, i8, i32 }
> %struct.system__standard_library__exception_data = type { i8, i8,
> i32, i32, %struct.system__standard_library__exception_data*, i32,
> void ()* }
> %struct.system__task_primitives__private_data = type { i32, i32, [48
> x i8], %struct.system__os_interface__pthread_mutex_t }
> %struct.system__tasking__accept_alternative = type { i8, i32 }
> %struct.system__tasking__accept_list_access = type { [0 x
> %struct.system__tasking__accept_alternative]*, %struct.RETURN* }
> %struct.system__tasking__ada_task_control_block = type { i32,
> %struct.system__tasking__common_atcb, [19 x
> %struct.system__tasking__entry_call_record], i32,
> %struct.system__tasking__accept_list_access, i32, i32, i32, i32,
> i32, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32, i32, i64, i32, i32,
> [4 x i32], i8, i32*, [0 x %struct.system__tasking__entry_queue] }
> %struct.system__tasking__async_delays__delay_block = type
> { %struct.system__tasking__ada_task_control_block*, i32, i64, i8,
> %struct.system__tasking__async_delays__delay_block*,
> %struct.system__tasking__async_delays__delay_block* }
> %struct.system__tasking__common_atcb = type { i8,
> %struct.system__tasking__ada_task_control_block*, i32, i32, i32, [32
> x i8], i32, %struct.system__tasking__entry_call_record*,
> %struct.system__task_primitives__private_data, i32, void (i32)*,
> %struct.system__soft_links__tsd,
> %struct.system__tasking__ada_task_control_block*,
> %struct.system__tasking__ada_task_control_block*,
> %struct.system__tasking__ada_task_control_block*, i32, i8*, i8, i8,
> %struct.system__stack_usage__stack_analyzer, i32,
> %struct.system__tasking__termination_handler,
> %struct.system__tasking__termination_handler }
> %struct.system__tasking__entry_call_record = type
> { %struct.system__tasking__ada_task_control_block*, i8, i8, i32,
> %struct.system__standard_library__exception_data*,
> %struct.system__tasking__entry_call_record*,
> %struct.system__tasking__entry_call_record*, i32, i32, i32,
> %struct.system__tasking__ada_task_control_block*, i32,
> %struct.system__tasking__entry_call_record*, i32, i8, i8, i8 }
> %struct.system__tasking__entry_queue = type
> { %struct.system__tasking__entry_call_record*,
> %struct.system__tasking__entry_call_record* }
> %struct.system__tasking__termination_handler = type { i32, void
> (i32, i8, %struct.system__tasking__ada_task_control_block*,
> %struct.ada__exceptions__exception_occurrence*)* }
>
> @C.168.1967 = external constant %struct.RETURN ; <
> %struct.RETURN*> [#uses=1]
>
> define void
> @system__tasking__activation_chainIP
> (%struct.c974001__timed_calculation* nocapture %_init) nounwind {
> entry:
> ret void
> }
>
> define void @_ada_c974001() {
> entry:
> %tramp = call i8* @llvm.init.trampoline(i8* undef, i8* bitcast
> (void (%struct.FRAME.c974001*, %struct.c974001__timed_calculation*)*
> @c974001__timed_calculationB.1770 to i8*), i8* undef) ; <i8*>
> [#uses=0]
> unreachable
> }
>
> declare i8* @llvm.init.trampoline(i8*, i8*, i8*) nounwind
>
> define fastcc void @c974001__lengthy_calculation.
> 1736(%struct.FRAME.c974001* nocapture %CHAIN.185) noreturn {
> entry:
> br label %bb
>
> bb: ; preds = %bb,
> %entry
> br label %bb
> }
>
> define fastcc void
> @c974001__timed_calculation__calculation__B19b__B21b__A17b___clean.
> 1830(%struct.FRAME.c974001__timed_calculation__calculationA* %CHAIN.
> 188) {
> entry:
> ret void
> }
>
> define fastcc void @c974001__timed_calculation__calculationA.
> 1820(%struct.FRAME.c974001__timed_calculationB* nocapture %CHAIN.
> 190) {
> entry:
> br i1 undef, label %bb, label %bb3
>
> bb: ; preds = %entry
> unreachable
>
> bb3: ; preds = %entry
> br i1 undef, label %bb4, label %bb5
>
> bb4: ; preds = %bb3
> unreachable
>
> bb5: ; preds = %bb3
> invoke void undef()
> to label %invcont unwind label %lpad
>
> invcont: ; preds = %bb5
> %0 = invoke i8 @system__tasking__async_delays__enqueue_duration(i64
> undef, %struct.system__tasking__async_delays__delay_block* undef)
> to label %bb8 unwind label %lpad ; <i8> [#uses=0]
>
> bb8: ; preds = %invcont
> invoke void undef()
> to label %invcont9 unwind label %lpad75
>
> invcont9: ; preds = %bb8
> invoke fastcc void @c974001__lengthy_calculation.
> 1736(%struct.FRAME.c974001* undef)
> to label %invcont10 unwind label %lpad75
>
> invcont10: ; preds = %invcont9
> invoke void @report__failed([0 x i8]* undef, %struct.RETURN* @C.
> 168.1967)
> to label %bb16 unwind label %lpad75
>
> bb16: ; preds = %invcont10
> invoke fastcc void
> @c974001__timed_calculation__calculation__B19b__B21b__A17b___clean.
> 1830(%struct.FRAME.c974001__timed_calculation__calculationA* undef)
> to label %bb27 unwind label %lpad71
>
> bb27: ; preds = %bb16
> unreachable
>
> lpad: ; preds =
> %invcont, %bb5
> unreachable
>
> lpad71: ; preds = %bb16
> unreachable
>
> lpad75: ; preds =
> %invcont10, %invcont9, %bb8
> unreachable
> }
>
> declare i8 @system__tasking__async_delays__enqueue_duration(i64,
> %struct.system__tasking__async_delays__delay_block*)
>
> declare void @report__failed([0 x i8]*, %struct.RETURN*)
>
> define void @c974001__timed_calculationB.1770(%struct.FRAME.c974001*
> nest %CHAIN.191, %struct.c974001__timed_calculation* nocapture
> %_task) {
> entry:
> invoke void undef()
> to label %invcont unwind label %lpad
>
> invcont: ; preds = %entry
> invoke void @system__tasking__stages__complete_activation()
> to label %bb unwind label %lpad
>
> bb: ; preds = %bb5,
> %invcont4, %invcont
> invoke void
> @system__tasking__rendezvous__selective_wait(%struct.RETURN* noalias
> sret undef, [0 x %struct.system__tasking__accept_alternative]*
> undef, %struct.RETURN* undef, i8 2)
> to label %invcont4 unwind label %lpad25
>
> invcont4: ; preds = %bb
> br i1 undef, label %bb5, label %bb
>
> bb5: ; preds = %invcont4
> invoke fastcc void @c974001__timed_calculation__calculationA.
> 1820(%struct.FRAME.c974001__timed_calculationB* undef)
> to label %bb unwind label %lpad25
>
> bb7: ; preds = %lpad25
> unreachable
>
> lpad: ; preds =
> %invcont, %entry
> unreachable
>
> lpad25: ; preds = %bb5, %bb
> br i1 undef, label %bb7, label %ppad
>
> ppad: ; preds = %lpad25
> unreachable
> }
>
> declare void @system__tasking__stages__complete_activation()
>
> declare void
> @system__tasking__rendezvous__selective_wait(%struct.RETURN* noalias
> sret, [0 x %struct.system__tasking__accept_alternative]*,
> %struct.RETURN*, i8)
More information about the llvm-dev
mailing list