; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -S -O3 < %s | FileCheck %s

target datalayout = "n64:32:16:8"

define i8 @test(i8 %x) {
; CHECK-LABEL: define range(i8 0, 53) i8 @test(
; CHECK-SAME: i8 [[X:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
; CHECK-NEXT:  [[START:.*:]]
; CHECK-NEXT:    [[X_:%.*]] = tail call i8 @llvm.umin.i8(i8 [[X]], i8 52)
; CHECK-NEXT:    ret i8 [[X_]]
;
start:
  %_0 = alloca [1 x i8], align 1
  %0 = icmp eq i8 %x, 0
  br i1 %0, label %bb1, label %bb2

bb1:                                              ; preds = %start
  store i8 0, ptr %_0, align 1
  br label %bb105

bb2:                                              ; preds = %start
  %1 = icmp eq i8 %x, 1
  br i1 %1, label %bb3, label %bb4

bb105:                                            ; preds = %bb104, %bb103, %bb101, %bb99, %bb97, %bb95, %bb93, %bb91, %bb89, %bb87, %bb85, %bb83, %bb81, %bb79, %bb77, %bb75, %bb73, %bb71, %bb69, %bb67, %bb65, %bb63, %bb61, %bb59, %bb57, %bb55, %bb53, %bb51, %bb49, %bb47, %bb45, %bb43, %bb41, %bb39, %bb37, %bb35, %bb33, %bb31, %bb29, %bb27, %bb25, %bb23, %bb21, %bb19, %bb17, %bb15, %bb13, %bb11, %bb9, %bb7, %bb5, %bb3, %bb1
  %2 = load i8, ptr %_0, align 1
  ret i8 %2

bb3:                                              ; preds = %bb2
  store i8 1, ptr %_0, align 1
  br label %bb105

bb4:                                              ; preds = %bb2
  %3 = icmp eq i8 %x, 2
  br i1 %3, label %bb5, label %bb6

bb5:                                              ; preds = %bb4
  store i8 2, ptr %_0, align 1
  br label %bb105

bb6:                                              ; preds = %bb4
  %4 = icmp eq i8 %x, 3
  br i1 %4, label %bb7, label %bb8

bb7:                                              ; preds = %bb6
  store i8 3, ptr %_0, align 1
  br label %bb105

bb8:                                              ; preds = %bb6
  %5 = icmp eq i8 %x, 4
  br i1 %5, label %bb9, label %bb10

bb9:                                              ; preds = %bb8
  store i8 4, ptr %_0, align 1
  br label %bb105

bb10:                                             ; preds = %bb8
  %6 = icmp eq i8 %x, 5
  br i1 %6, label %bb11, label %bb12

bb11:                                             ; preds = %bb10
  store i8 5, ptr %_0, align 1
  br label %bb105

bb12:                                             ; preds = %bb10
  %7 = icmp eq i8 %x, 6
  br i1 %7, label %bb13, label %bb14

bb13:                                             ; preds = %bb12
  store i8 6, ptr %_0, align 1
  br label %bb105

bb14:                                             ; preds = %bb12
  %8 = icmp eq i8 %x, 7
  br i1 %8, label %bb15, label %bb16

bb15:                                             ; preds = %bb14
  store i8 7, ptr %_0, align 1
  br label %bb105

bb16:                                             ; preds = %bb14
  %9 = icmp eq i8 %x, 8
  br i1 %9, label %bb17, label %bb18

bb17:                                             ; preds = %bb16
  store i8 8, ptr %_0, align 1
  br label %bb105

bb18:                                             ; preds = %bb16
  %10 = icmp eq i8 %x, 9
  br i1 %10, label %bb19, label %bb20

bb19:                                             ; preds = %bb18
  store i8 9, ptr %_0, align 1
  br label %bb105

bb20:                                             ; preds = %bb18
  %11 = icmp eq i8 %x, 10
  br i1 %11, label %bb21, label %bb22

bb21:                                             ; preds = %bb20
  store i8 10, ptr %_0, align 1
  br label %bb105

bb22:                                             ; preds = %bb20
  %12 = icmp eq i8 %x, 11
  br i1 %12, label %bb23, label %bb24

bb23:                                             ; preds = %bb22
  store i8 11, ptr %_0, align 1
  br label %bb105

bb24:                                             ; preds = %bb22
  %13 = icmp eq i8 %x, 12
  br i1 %13, label %bb25, label %bb26

bb25:                                             ; preds = %bb24
  store i8 12, ptr %_0, align 1
  br label %bb105

bb26:                                             ; preds = %bb24
  %14 = icmp eq i8 %x, 13
  br i1 %14, label %bb27, label %bb28

bb27:                                             ; preds = %bb26
  store i8 13, ptr %_0, align 1
  br label %bb105

bb28:                                             ; preds = %bb26
  %15 = icmp eq i8 %x, 14
  br i1 %15, label %bb29, label %bb30

bb29:                                             ; preds = %bb28
  store i8 14, ptr %_0, align 1
  br label %bb105

bb30:                                             ; preds = %bb28
  %16 = icmp eq i8 %x, 15
  br i1 %16, label %bb31, label %bb32

bb31:                                             ; preds = %bb30
  store i8 15, ptr %_0, align 1
  br label %bb105

bb32:                                             ; preds = %bb30
  %17 = icmp eq i8 %x, 16
  br i1 %17, label %bb33, label %bb34

bb33:                                             ; preds = %bb32
  store i8 16, ptr %_0, align 1
  br label %bb105

bb34:                                             ; preds = %bb32
  %18 = icmp eq i8 %x, 17
  br i1 %18, label %bb35, label %bb36

bb35:                                             ; preds = %bb34
  store i8 17, ptr %_0, align 1
  br label %bb105

bb36:                                             ; preds = %bb34
  %19 = icmp eq i8 %x, 18
  br i1 %19, label %bb37, label %bb38

bb37:                                             ; preds = %bb36
  store i8 18, ptr %_0, align 1
  br label %bb105

bb38:                                             ; preds = %bb36
  %20 = icmp eq i8 %x, 19
  br i1 %20, label %bb39, label %bb40

bb39:                                             ; preds = %bb38
  store i8 19, ptr %_0, align 1
  br label %bb105

bb40:                                             ; preds = %bb38
  %21 = icmp eq i8 %x, 20
  br i1 %21, label %bb41, label %bb42

bb41:                                             ; preds = %bb40
  store i8 20, ptr %_0, align 1
  br label %bb105

bb42:                                             ; preds = %bb40
  %22 = icmp eq i8 %x, 21
  br i1 %22, label %bb43, label %bb44

bb43:                                             ; preds = %bb42
  store i8 21, ptr %_0, align 1
  br label %bb105

bb44:                                             ; preds = %bb42
  %23 = icmp eq i8 %x, 22
  br i1 %23, label %bb45, label %bb46

bb45:                                             ; preds = %bb44
  store i8 22, ptr %_0, align 1
  br label %bb105

bb46:                                             ; preds = %bb44
  %24 = icmp eq i8 %x, 23
  br i1 %24, label %bb47, label %bb48

bb47:                                             ; preds = %bb46
  store i8 23, ptr %_0, align 1
  br label %bb105

bb48:                                             ; preds = %bb46
  %25 = icmp eq i8 %x, 24
  br i1 %25, label %bb49, label %bb50

bb49:                                             ; preds = %bb48
  store i8 24, ptr %_0, align 1
  br label %bb105

bb50:                                             ; preds = %bb48
  %26 = icmp eq i8 %x, 25
  br i1 %26, label %bb51, label %bb52

bb51:                                             ; preds = %bb50
  store i8 25, ptr %_0, align 1
  br label %bb105

bb52:                                             ; preds = %bb50
  %27 = icmp eq i8 %x, 26
  br i1 %27, label %bb53, label %bb54

bb53:                                             ; preds = %bb52
  store i8 26, ptr %_0, align 1
  br label %bb105

bb54:                                             ; preds = %bb52
  %28 = icmp eq i8 %x, 27
  br i1 %28, label %bb55, label %bb56

bb55:                                             ; preds = %bb54
  store i8 27, ptr %_0, align 1
  br label %bb105

bb56:                                             ; preds = %bb54
  %29 = icmp eq i8 %x, 28
  br i1 %29, label %bb57, label %bb58

bb57:                                             ; preds = %bb56
  store i8 28, ptr %_0, align 1
  br label %bb105

bb58:                                             ; preds = %bb56
  %30 = icmp eq i8 %x, 29
  br i1 %30, label %bb59, label %bb60

bb59:                                             ; preds = %bb58
  store i8 29, ptr %_0, align 1
  br label %bb105

bb60:                                             ; preds = %bb58
  %31 = icmp eq i8 %x, 30
  br i1 %31, label %bb61, label %bb62

bb61:                                             ; preds = %bb60
  store i8 30, ptr %_0, align 1
  br label %bb105

bb62:                                             ; preds = %bb60
  %32 = icmp eq i8 %x, 31
  br i1 %32, label %bb63, label %bb64

bb63:                                             ; preds = %bb62
  store i8 31, ptr %_0, align 1
  br label %bb105

bb64:                                             ; preds = %bb62
  %33 = icmp eq i8 %x, 32
  br i1 %33, label %bb65, label %bb66

bb65:                                             ; preds = %bb64
  store i8 32, ptr %_0, align 1
  br label %bb105

bb66:                                             ; preds = %bb64
  %34 = icmp eq i8 %x, 33
  br i1 %34, label %bb67, label %bb68

bb67:                                             ; preds = %bb66
  store i8 33, ptr %_0, align 1
  br label %bb105

bb68:                                             ; preds = %bb66
  %35 = icmp eq i8 %x, 34
  br i1 %35, label %bb69, label %bb70

bb69:                                             ; preds = %bb68
  store i8 34, ptr %_0, align 1
  br label %bb105

bb70:                                             ; preds = %bb68
  %36 = icmp eq i8 %x, 35
  br i1 %36, label %bb71, label %bb72

bb71:                                             ; preds = %bb70
  store i8 35, ptr %_0, align 1
  br label %bb105

bb72:                                             ; preds = %bb70
  %37 = icmp eq i8 %x, 36
  br i1 %37, label %bb73, label %bb74

bb73:                                             ; preds = %bb72
  store i8 36, ptr %_0, align 1
  br label %bb105

bb74:                                             ; preds = %bb72
  %38 = icmp eq i8 %x, 37
  br i1 %38, label %bb75, label %bb76

bb75:                                             ; preds = %bb74
  store i8 37, ptr %_0, align 1
  br label %bb105

bb76:                                             ; preds = %bb74
  %39 = icmp eq i8 %x, 38
  br i1 %39, label %bb77, label %bb78

bb77:                                             ; preds = %bb76
  store i8 38, ptr %_0, align 1
  br label %bb105

bb78:                                             ; preds = %bb76
  %40 = icmp eq i8 %x, 39
  br i1 %40, label %bb79, label %bb80

bb79:                                             ; preds = %bb78
  store i8 39, ptr %_0, align 1
  br label %bb105

bb80:                                             ; preds = %bb78
  %41 = icmp eq i8 %x, 40
  br i1 %41, label %bb81, label %bb82

bb81:                                             ; preds = %bb80
  store i8 40, ptr %_0, align 1
  br label %bb105

bb82:                                             ; preds = %bb80
  %42 = icmp eq i8 %x, 41
  br i1 %42, label %bb83, label %bb84

bb83:                                             ; preds = %bb82
  store i8 41, ptr %_0, align 1
  br label %bb105

bb84:                                             ; preds = %bb82
  %43 = icmp eq i8 %x, 42
  br i1 %43, label %bb85, label %bb86

bb85:                                             ; preds = %bb84
  store i8 42, ptr %_0, align 1
  br label %bb105

bb86:                                             ; preds = %bb84
  %44 = icmp eq i8 %x, 43
  br i1 %44, label %bb87, label %bb88

bb87:                                             ; preds = %bb86
  store i8 43, ptr %_0, align 1
  br label %bb105

bb88:                                             ; preds = %bb86
  %45 = icmp eq i8 %x, 44
  br i1 %45, label %bb89, label %bb90

bb89:                                             ; preds = %bb88
  store i8 44, ptr %_0, align 1
  br label %bb105

bb90:                                             ; preds = %bb88
  %46 = icmp eq i8 %x, 45
  br i1 %46, label %bb91, label %bb92

bb91:                                             ; preds = %bb90
  store i8 45, ptr %_0, align 1
  br label %bb105

bb92:                                             ; preds = %bb90
  %47 = icmp eq i8 %x, 46
  br i1 %47, label %bb93, label %bb94

bb93:                                             ; preds = %bb92
  store i8 46, ptr %_0, align 1
  br label %bb105

bb94:                                             ; preds = %bb92
  %48 = icmp eq i8 %x, 47
  br i1 %48, label %bb95, label %bb96

bb95:                                             ; preds = %bb94
  store i8 47, ptr %_0, align 1
  br label %bb105

bb96:                                             ; preds = %bb94
  %49 = icmp eq i8 %x, 48
  br i1 %49, label %bb97, label %bb98

bb97:                                             ; preds = %bb96
  store i8 48, ptr %_0, align 1
  br label %bb105

bb98:                                             ; preds = %bb96
  %50 = icmp eq i8 %x, 49
  br i1 %50, label %bb99, label %bb100

bb99:                                             ; preds = %bb98
  store i8 49, ptr %_0, align 1
  br label %bb105

bb100:                                            ; preds = %bb98
  %51 = icmp eq i8 %x, 50
  br i1 %51, label %bb101, label %bb102

bb101:                                            ; preds = %bb100
  store i8 50, ptr %_0, align 1
  br label %bb105

bb102:                                            ; preds = %bb100
  %52 = icmp eq i8 %x, 51
  br i1 %52, label %bb103, label %bb104

bb103:                                            ; preds = %bb102
  store i8 51, ptr %_0, align 1
  br label %bb105

bb104:                                            ; preds = %bb102
  store i8 52, ptr %_0, align 1
  br label %bb105
}

; Make sure the call is inlined.
define i8 @test2(i8 %x) {
; CHECK-LABEL: define range(i8 0, 53) i8 @test2(
; CHECK-SAME: i8 [[X:%.*]]) local_unnamed_addr #[[ATTR0]] {
; CHECK-NEXT:    [[CALL:%.*]] = tail call range(i8 0, 53) i8 @llvm.umin.i8(i8 [[X]], i8 52)
; CHECK-NEXT:    ret i8 [[CALL]]
;
  %call = call i8 @test(i8 %x)
  ret i8 %call
}
