This is the last remaining bug that I know of in the loop extractor. The loop
authorChris Lattner <sabre@nondot.org>
Thu, 18 Mar 2004 06:41:59 +0000 (06:41 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 18 Mar 2004 06:41:59 +0000 (06:41 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12495 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/CodeExtractor/2004-03-18-InvokeHandling.ll [new file with mode: 0644]

diff --git a/test/Transforms/CodeExtractor/2004-03-18-InvokeHandling.ll b/test/Transforms/CodeExtractor/2004-03-18-InvokeHandling.ll
new file mode 100644 (file)
index 0000000..a128dda
--- /dev/null
@@ -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
+}