1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00

This is the last remaining bug that I know of in the loop extractor. The loop

extractor has extracted hundreds of loops from the SPEC benchmarks without crashing
and without misoptimizing the programs.

This testcase could be reduced substantially more by hand, but I don't have time
to work on it right now.

llvm-svn: 12495
This commit is contained in:
Chris Lattner 2004-03-18 06:41:59 +00:00
parent ef7c1e9f7f
commit 1d4d74ac9a

View File

@ -0,0 +1,196 @@
; RUN: llvm-as < %s | opt -loop-extract -disable-output
implementation ; Functions:
declare int %_IO_getc()
declare void %__errno_location()
void %yylex() {
entry:
switch uint 0, label %label.126 [
uint 0, label %return
uint 61, label %combine
uint 33, label %combine
uint 94, label %combine
uint 37, label %combine
uint 47, label %combine
uint 42, label %combine
uint 62, label %combine
uint 60, label %combine
uint 58, label %combine
uint 124, label %combine
uint 38, label %combine
uint 45, label %combine
uint 43, label %combine
uint 34, label %string_constant
uint 39, label %char_constant
uint 46, label %loopexit.2
uint 57, label %loopexit.2
uint 56, label %loopexit.2
uint 55, label %loopexit.2
uint 54, label %loopexit.2
uint 53, label %loopexit.2
uint 52, label %loopexit.2
uint 51, label %loopexit.2
uint 50, label %loopexit.2
uint 49, label %loopexit.2
uint 48, label %loopexit.2
uint 95, label %letter
uint 122, label %letter
uint 121, label %letter
uint 120, label %letter
uint 119, label %letter
uint 118, label %letter
uint 117, label %letter
uint 116, label %letter
uint 115, label %letter
uint 114, label %letter
uint 113, label %letter
uint 112, label %letter
uint 111, label %letter
uint 110, label %letter
uint 109, label %letter
uint 108, label %letter
uint 107, label %letter
uint 106, label %letter
uint 105, label %letter
uint 104, label %letter
uint 103, label %letter
uint 102, label %letter
uint 101, label %letter
uint 100, label %letter
uint 99, label %letter
uint 98, label %letter
uint 97, label %letter
uint 90, label %letter
uint 89, label %letter
uint 88, label %letter
uint 87, label %letter
uint 86, label %letter
uint 85, label %letter
uint 84, label %letter
uint 83, label %letter
uint 82, label %letter
uint 81, label %letter
uint 80, label %letter
uint 79, label %letter
uint 78, label %letter
uint 77, label %letter
uint 75, label %letter
uint 74, label %letter
uint 73, label %letter
uint 72, label %letter
uint 71, label %letter
uint 70, label %letter
uint 69, label %letter
uint 68, label %letter
uint 67, label %letter
uint 66, label %letter
uint 65, label %letter
uint 64, label %label.13
uint 76, label %label.12
uint 36, label %label.11
uint 4294967295, label %label.10
]
label.10: ; preds = %entry
ret void
label.11: ; preds = %entry
ret void
label.12: ; preds = %entry
ret void
label.13: ; preds = %entry
ret void
letter: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry
ret void
loopexit.2: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry
switch int 0, label %shortcirc_next.14 [
int 48, label %then.20
int 46, label %endif.38
]
then.20: ; preds = %loopexit.2
switch int 0, label %else.4 [
int 120, label %then.21
int 88, label %then.21
]
then.21: ; preds = %then.20, %then.20
ret void
else.4: ; preds = %then.20
ret void
shortcirc_next.14: ; preds = %loopexit.2
ret void
endif.38: ; preds = %loopexit.2
br bool false, label %then.40, label %then.39
then.39: ; preds = %endif.38
ret void
then.40: ; preds = %endif.38
invoke void %__errno_location( )
to label %switchexit.2 unwind label %LongJmpBlkPre
loopentry.6: ; preds = %endif.52
switch uint 0, label %switchexit.2 [
uint 73, label %label.82
uint 105, label %label.82
uint 76, label %label.80
uint 108, label %label.80
uint 70, label %label.78
uint 102, label %label.78
]
label.78: ; preds = %loopentry.6, %loopentry.6
ret void
label.80: ; preds = %loopentry.6, %loopentry.6
ret void
label.82: ; preds = %loopentry.6, %loopentry.6
%c.0.15.5 = phi int [ %tmp.79417, %loopentry.6 ], [ %tmp.79417, %loopentry.6 ] ; <int> [#uses=0]
ret void
switchexit.2: ; preds = %then.40, %loopentry.6
br bool false, label %endif.51, label %loopexit.6
endif.51: ; preds = %switchexit.2
br bool false, label %endif.52, label %then.52
then.52: ; preds = %endif.51
ret void
endif.52: ; preds = %endif.51
%tmp.79417 = invoke int %_IO_getc( )
to label %loopentry.6 unwind label %LongJmpBlkPre ; <int> [#uses=2]
loopexit.6: ; preds = %switchexit.2
ret void
char_constant: ; preds = %entry
ret void
string_constant: ; preds = %entry
ret void
combine: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry
ret void
label.126: ; preds = %entry
ret void
return: ; preds = %entry
ret void
LongJmpBlkPre: ; preds = %then.40, %endif.52
ret void
}