| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 
 | ; RUN: llc -mtriple=thumb-eabi -mcpu=arm1156t2-s -mattr=+thumb2 -arm-adjust-jump-tables=0 %s -o - | FileCheck %s
; RUN: llc -mtriple=thumbv6-eabi -mcpu=cortex-m0 -arm-adjust-jump-tables=0 %s -o - | FileCheck %s
; Do not use tbb / tbh if any destination is before the jumptable.
; rdar://7102917
define i16 @main__getopt_internal_2E_exit_2E_ce(i32, i1 %b) nounwind {
; CHECK: main__getopt_internal_2E_exit_2E_ce
; CHECK-NOT: tbb
; CHECK-NOT: tbh
; 32-bit jump tables use explicit branches, not data regions, so make sure
; we don't annotate this region.
; CHECK-NOT: data_region
entry:
  br i1 %b, label %codeRepl127.exitStub, label %newFuncRoot
codeRepl127.exitStub:		; preds = %_getopt_internal.exit.ce
  ; Add an explicit edge back to before the jump table to ensure this block
  ; is placed first.
  br i1 %b, label %newFuncRoot, label %codeRepl127.exitStub.exit
codeRepl127.exitStub.exit:
	ret i16 0
parse_options.exit.loopexit.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 1
bb1.i.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 2
bb90.i.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 3
codeRepl104.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 4
codeRepl113.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 5
codeRepl51.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 6
codeRepl70.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 7
codeRepl119.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 8
codeRepl93.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 9
codeRepl101.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 10
codeRepl120.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 11
codeRepl89.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 12
codeRepl45.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 13
codeRepl58.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 14
codeRepl46.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 15
codeRepl50.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 16
codeRepl52.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 17
codeRepl53.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 18
codeRepl61.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 19
codeRepl85.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 20
codeRepl97.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 21
codeRepl79.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 22
codeRepl102.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 23
codeRepl54.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 24
codeRepl57.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 25
codeRepl103.exitStub:		; preds = %_getopt_internal.exit.ce
	ret i16 26
newFuncRoot:
	br label %_getopt_internal.exit.ce
_getopt_internal.exit.ce:		; preds = %newFuncRoot
	switch i32 %0, label %codeRepl127.exitStub [
		i32 -1, label %parse_options.exit.loopexit.exitStub
		i32 0, label %bb1.i.exitStub
		i32 63, label %bb90.i.exitStub
		i32 66, label %codeRepl104.exitStub
		i32 67, label %codeRepl113.exitStub
		i32 71, label %codeRepl51.exitStub
		i32 77, label %codeRepl70.exitStub
		i32 78, label %codeRepl119.exitStub
		i32 80, label %codeRepl93.exitStub
		i32 81, label %codeRepl101.exitStub
		i32 82, label %codeRepl120.exitStub
		i32 88, label %codeRepl89.exitStub
		i32 97, label %codeRepl45.exitStub
		i32 98, label %codeRepl58.exitStub
		i32 99, label %codeRepl46.exitStub
		i32 100, label %codeRepl50.exitStub
		i32 104, label %codeRepl52.exitStub
		i32 108, label %codeRepl53.exitStub
		i32 109, label %codeRepl61.exitStub
		i32 110, label %codeRepl85.exitStub
		i32 111, label %codeRepl97.exitStub
		i32 113, label %codeRepl79.exitStub
		i32 114, label %codeRepl102.exitStub
		i32 115, label %codeRepl54.exitStub
		i32 116, label %codeRepl57.exitStub
		i32 118, label %codeRepl103.exitStub
	]
}
 |