reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    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
  136
  137
  138
  139
  140
  141
  142
  143
  144
  145
  146
  147
  148
  149
  150
  151
  152
  153
  154
  155
  156
; RUN: opt < %s -analyze -scalar-evolution | FileCheck %s

; SCEV would take a long time to compute SCEV expressions for this IR.  If SCEV
; finishes in < 1 second then the bug is fixed.

target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64--linux-gnu"

define void @smax(i32 %tmp3) {
 ; CHECK-LABEL: Printing analysis 'Scalar Evolution Analysis' for function 'smax'
entry:
  br label %bb4

bb4:
  %tmp5 = phi i64 [ %tmp62, %bb61 ], [ 0, %entry ]
  %tmp6 = trunc i64 %tmp5 to i32
  %tmp7 = shl nsw i32 %tmp6, 8
  %tmp8 = sub nsw i32 %tmp3, %tmp7
  %tmp9 = icmp slt i32 %tmp8, 256
  %tmp10 = select i1 %tmp9, i32 %tmp8, i32 256
  %tmp11 = add nsw i32 %tmp10, 1
  %tmp12 = icmp sgt i32 %tmp8, %tmp11
  %tmp13 = select i1 %tmp12, i32 %tmp11, i32 %tmp8
  %tmp14 = icmp slt i32 %tmp13, 256
  %tmp15 = select i1 %tmp14, i32 %tmp13, i32 256
  %tmp16 = add nsw i32 %tmp15, 1
  %tmp17 = icmp sgt i32 %tmp8, %tmp16
  %tmp18 = select i1 %tmp17, i32 %tmp16, i32 %tmp8
  %tmp19 = icmp slt i32 %tmp18, 256
  %tmp20 = select i1 %tmp19, i32 %tmp18, i32 256
  %tmp21 = add nsw i32 %tmp20, 1
  %tmp22 = icmp sgt i32 %tmp8, %tmp21
  %tmp23 = select i1 %tmp22, i32 %tmp21, i32 %tmp8
  %tmp24 = icmp slt i32 %tmp23, 256
  %tmp25 = select i1 %tmp24, i32 %tmp23, i32 256
  %tmp26 = add nsw i32 %tmp25, 1
  %tmp27 = icmp sgt i32 %tmp8, %tmp26
  %tmp28 = select i1 %tmp27, i32 %tmp26, i32 %tmp8
  %tmp29 = icmp slt i32 %tmp28, 256
  %tmp30 = select i1 %tmp29, i32 %tmp28, i32 256
  %tmp31 = add nsw i32 %tmp30, 1
  %tmp32 = icmp sgt i32 %tmp8, %tmp31
  %tmp33 = select i1 %tmp32, i32 %tmp31, i32 %tmp8
  %tmp34 = icmp slt i32 %tmp33, 256
  %tmp35 = select i1 %tmp34, i32 %tmp33, i32 256
  %tmp36 = add nsw i32 %tmp35, 1
  %tmp37 = icmp sgt i32 %tmp8, %tmp36
  %tmp38 = select i1 %tmp37, i32 %tmp36, i32 %tmp8
  %tmp39 = icmp slt i32 %tmp38, 256
  %tmp40 = select i1 %tmp39, i32 %tmp38, i32 256
  %tmp41 = add nsw i32 %tmp40, 1
  %tmp42 = icmp sgt i32 %tmp8, %tmp41
  %tmp43 = select i1 %tmp42, i32 %tmp41, i32 %tmp8
  %tmp44 = add nsw i32 %tmp10, 7
  %tmp45 = icmp slt i32 %tmp43, 256
  %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
; CHECK:  %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
; CHECK-NEXT:  -->  (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin (1 + (256 smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>))<nsw> smin {%tmp3,+,-256}<%bb4>) U: [-2147483648,257) S: [-2147483648,257)
  %tmp47 = icmp sgt i32 %tmp44, %tmp46
  %tmp48 = select i1 %tmp47, i32 %tmp44, i32 %tmp46
  %tmp49 = ashr i32 %tmp48, 3
  %tmp50 = icmp sgt i32 %tmp49, 0
  %tmp51 = select i1 %tmp50, i32 %tmp49, i32 0
  %tmp52 = zext i32 %tmp51 to i64
  br label %bb53

bb53:
  %tmp54 = phi i64 [ undef, %bb4 ], [ %tmp59, %bb53 ]
  %tmp55 = trunc i64 %tmp54 to i32
  %tmp56 = shl nsw i32 %tmp55, 3
  %tmp57 = sext i32 %tmp56 to i64
  %tmp58 = getelementptr inbounds i8, i8* null, i64 %tmp57
  store i8 undef, i8* %tmp58, align 8
  %tmp59 = add nsw i64 %tmp54, 1
  %tmp60 = icmp eq i64 %tmp59, %tmp52
  br i1 %tmp60, label %bb61, label %bb53

bb61:
  %tmp62 = add nuw nsw i64 %tmp5, 1
  br label %bb4
}


define void @umax(i32 %tmp3) {
; CHECK-LABEL: Printing analysis 'Scalar Evolution Analysis' for function 'umax'
entry:
  br label %bb4

bb4:
  %tmp5 = phi i64 [ %tmp62, %bb61 ], [ 0, %entry ]
  %tmp6 = trunc i64 %tmp5 to i32
  %tmp7 = shl nsw i32 %tmp6, 8
  %tmp8 = sub nsw i32 %tmp3, %tmp7
  %tmp9 = icmp ult i32 %tmp8, 256
  %tmp10 = select i1 %tmp9, i32 %tmp8, i32 256
  %tmp11 = add nsw i32 %tmp10, 1
  %tmp12 = icmp ugt i32 %tmp8, %tmp11
  %tmp13 = select i1 %tmp12, i32 %tmp11, i32 %tmp8
  %tmp14 = icmp ult i32 %tmp13, 256
  %tmp15 = select i1 %tmp14, i32 %tmp13, i32 256
  %tmp16 = add nsw i32 %tmp15, 1
  %tmp17 = icmp ugt i32 %tmp8, %tmp16
  %tmp18 = select i1 %tmp17, i32 %tmp16, i32 %tmp8
  %tmp19 = icmp ult i32 %tmp18, 256
  %tmp20 = select i1 %tmp19, i32 %tmp18, i32 256
  %tmp21 = add nsw i32 %tmp20, 1
  %tmp22 = icmp ugt i32 %tmp8, %tmp21
  %tmp23 = select i1 %tmp22, i32 %tmp21, i32 %tmp8
  %tmp24 = icmp ult i32 %tmp23, 256
  %tmp25 = select i1 %tmp24, i32 %tmp23, i32 256
  %tmp26 = add nsw i32 %tmp25, 1
  %tmp27 = icmp ugt i32 %tmp8, %tmp26
  %tmp28 = select i1 %tmp27, i32 %tmp26, i32 %tmp8
  %tmp29 = icmp ult i32 %tmp28, 256
  %tmp30 = select i1 %tmp29, i32 %tmp28, i32 256
  %tmp31 = add nsw i32 %tmp30, 1
  %tmp32 = icmp ugt i32 %tmp8, %tmp31
  %tmp33 = select i1 %tmp32, i32 %tmp31, i32 %tmp8
  %tmp34 = icmp ult i32 %tmp33, 256
  %tmp35 = select i1 %tmp34, i32 %tmp33, i32 256
  %tmp36 = add nsw i32 %tmp35, 1
  %tmp37 = icmp ugt i32 %tmp8, %tmp36
  %tmp38 = select i1 %tmp37, i32 %tmp36, i32 %tmp8
  %tmp39 = icmp ult i32 %tmp38, 256
  %tmp40 = select i1 %tmp39, i32 %tmp38, i32 256
  %tmp41 = add nsw i32 %tmp40, 1
  %tmp42 = icmp ugt i32 %tmp8, %tmp41
  %tmp43 = select i1 %tmp42, i32 %tmp41, i32 %tmp8
  %tmp44 = add nsw i32 %tmp10, 7
  %tmp45 = icmp ult i32 %tmp43, 256
  %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
; CHECK:  %tmp46 = select i1 %tmp45, i32 %tmp43, i32 256
; CHECK-NEXT:  --> (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin (1 + (256 umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>))<nuw><nsw> umin {%tmp3,+,-256}<%bb4>) U: [0,257) S: [0,257)
  %tmp47 = icmp ugt i32 %tmp44, %tmp46
  %tmp48 = select i1 %tmp47, i32 %tmp44, i32 %tmp46
  %tmp49 = ashr i32 %tmp48, 3
  %tmp50 = icmp ugt i32 %tmp49, 0
  %tmp51 = select i1 %tmp50, i32 %tmp49, i32 0
  %tmp52 = zext i32 %tmp51 to i64
  br label %bb53

bb53:
  %tmp54 = phi i64 [ undef, %bb4 ], [ %tmp59, %bb53 ]
  %tmp55 = trunc i64 %tmp54 to i32
  %tmp56 = shl nsw i32 %tmp55, 3
  %tmp57 = sext i32 %tmp56 to i64
  %tmp58 = getelementptr inbounds i8, i8* null, i64 %tmp57
  store i8 undef, i8* %tmp58, align 8
  %tmp59 = add nsw i64 %tmp54, 1
  %tmp60 = icmp eq i64 %tmp59, %tmp52
  br i1 %tmp60, label %bb61, label %bb53

bb61:
  %tmp62 = add nuw nsw i64 %tmp5, 1
  br label %bb4
}