1d539357eSDavid Green; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2f1ec0d12SNick Anderson; RUN: opt -S -passes='require<profile-summary>,function(codegenprepare)' < %s | FileCheck %s 3d539357eSDavid Green 4d539357eSDavid Greentarget datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" 5d539357eSDavid Greentarget triple = "thumbv8.1m.main-none-eabi" 6d539357eSDavid Green 7d539357eSDavid Greendefine i32 @lshr3_then(i32 %a) { 8d539357eSDavid Green; CHECK-LABEL: @lshr3_then( 9d539357eSDavid Green; CHECK-NEXT: entry: 10dd5c5202SDavid Green; CHECK-NEXT: [[L:%.*]] = lshr i32 [[A:%.*]], 3 11dd5c5202SDavid Green; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i32 [[L]], 0 12dd5c5202SDavid Green; CHECK-NEXT: br i1 [[TMP0]], label [[THEN:%.*]], label [[ELSE:%.*]] 13d539357eSDavid Green; CHECK: then: 14d539357eSDavid Green; CHECK-NEXT: ret i32 0 15d539357eSDavid Green; CHECK: else: 16d539357eSDavid Green; CHECK-NEXT: ret i32 [[L]] 17d539357eSDavid Green; 18d539357eSDavid Greenentry: 19d539357eSDavid Green %c = icmp ult i32 %a, 8 20d539357eSDavid Green br i1 %c, label %then, label %else 21d539357eSDavid Green 22d539357eSDavid Greenthen: 23d539357eSDavid Green ret i32 0 24d539357eSDavid Green 25d539357eSDavid Greenelse: 26d539357eSDavid Green %l = lshr i32 %a, 3 27d539357eSDavid Green ret i32 %l 28d539357eSDavid Green} 29d539357eSDavid Green 30d539357eSDavid Greendefine i32 @lshr5_else(i32 %a) { 31d539357eSDavid Green; CHECK-LABEL: @lshr5_else( 32d539357eSDavid Green; CHECK-NEXT: entry: 33dd5c5202SDavid Green; CHECK-NEXT: [[L:%.*]] = lshr i32 [[A:%.*]], 5 34dd5c5202SDavid Green; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i32 [[L]], 0 35dd5c5202SDavid Green; CHECK-NEXT: br i1 [[TMP0]], label [[THEN:%.*]], label [[ELSE:%.*]] 36d539357eSDavid Green; CHECK: then: 37d539357eSDavid Green; CHECK-NEXT: ret i32 [[L]] 38d539357eSDavid Green; CHECK: else: 39d539357eSDavid Green; CHECK-NEXT: ret i32 0 40d539357eSDavid Green; 41d539357eSDavid Greenentry: 42d539357eSDavid Green %c = icmp ult i32 %a, 32 43d539357eSDavid Green br i1 %c, label %then, label %else 44d539357eSDavid Green 45d539357eSDavid Greenthen: 46d539357eSDavid Green %l = lshr i32 %a, 5 47d539357eSDavid Green ret i32 %l 48d539357eSDavid Green 49d539357eSDavid Greenelse: 50d539357eSDavid Green ret i32 0 51d539357eSDavid Green} 52d539357eSDavid Green 53d539357eSDavid Greendefine i32 @lshr2_entry(i32 %a) { 54d539357eSDavid Green; CHECK-LABEL: @lshr2_entry( 55d539357eSDavid Green; CHECK-NEXT: entry: 56d539357eSDavid Green; CHECK-NEXT: [[L:%.*]] = lshr i32 [[A:%.*]], 1 57dd5c5202SDavid Green; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i32 [[L]], 0 58dd5c5202SDavid Green; CHECK-NEXT: br i1 [[TMP0]], label [[THEN:%.*]], label [[ELSE:%.*]] 59d539357eSDavid Green; CHECK: then: 60d539357eSDavid Green; CHECK-NEXT: ret i32 [[L]] 61d539357eSDavid Green; CHECK: else: 62d539357eSDavid Green; CHECK-NEXT: ret i32 0 63d539357eSDavid Green; 64d539357eSDavid Greenentry: 65d539357eSDavid Green %l = lshr i32 %a, 1 66d539357eSDavid Green %c = icmp ult i32 %a, 2 67d539357eSDavid Green br i1 %c, label %then, label %else 68d539357eSDavid Green 69d539357eSDavid Greenthen: 70d539357eSDavid Green ret i32 %l 71d539357eSDavid Green 72d539357eSDavid Greenelse: 73d539357eSDavid Green ret i32 0 74d539357eSDavid Green} 75d539357eSDavid Green 76d539357eSDavid Greendefine i32 @lshr5mismatch(i32 %a) { 77d539357eSDavid Green; CHECK-LABEL: @lshr5mismatch( 78d539357eSDavid Green; CHECK-NEXT: entry: 79d539357eSDavid Green; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[A:%.*]], 17 80d539357eSDavid Green; CHECK-NEXT: br i1 [[C]], label [[THEN:%.*]], label [[ELSE:%.*]] 81d539357eSDavid Green; CHECK: then: 82d539357eSDavid Green; CHECK-NEXT: [[L:%.*]] = lshr i32 [[A]], 5 83d539357eSDavid Green; CHECK-NEXT: ret i32 [[L]] 84d539357eSDavid Green; CHECK: else: 85d539357eSDavid Green; CHECK-NEXT: ret i32 0 86d539357eSDavid Green; 87d539357eSDavid Greenentry: 88d539357eSDavid Green %c = icmp ult i32 %a, 17 89d539357eSDavid Green br i1 %c, label %then, label %else 90d539357eSDavid Green 91d539357eSDavid Greenthen: 92d539357eSDavid Green %l = lshr i32 %a, 5 93d539357eSDavid Green ret i32 %l 94d539357eSDavid Green 95d539357eSDavid Greenelse: 96d539357eSDavid Green ret i32 0 97d539357eSDavid Green} 98d539357eSDavid Green 99d539357eSDavid Greendefine i32 @ashr5_else(i32 %a) { 100d539357eSDavid Green; CHECK-LABEL: @ashr5_else( 101d539357eSDavid Green; CHECK-NEXT: entry: 102dd5c5202SDavid Green; CHECK-NEXT: [[L:%.*]] = ashr i32 [[A:%.*]], 5 103dd5c5202SDavid Green; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i32 [[L]], 0 104dd5c5202SDavid Green; CHECK-NEXT: br i1 [[TMP0]], label [[THEN:%.*]], label [[ELSE:%.*]] 105d539357eSDavid Green; CHECK: then: 106d539357eSDavid Green; CHECK-NEXT: ret i32 [[L]] 107d539357eSDavid Green; CHECK: else: 108d539357eSDavid Green; CHECK-NEXT: ret i32 0 109d539357eSDavid Green; 110d539357eSDavid Greenentry: 111d539357eSDavid Green %c = icmp ult i32 %a, 32 112d539357eSDavid Green br i1 %c, label %then, label %else 113d539357eSDavid Green 114d539357eSDavid Greenthen: 115d539357eSDavid Green %l = ashr i32 %a, 5 116d539357eSDavid Green ret i32 %l 117d539357eSDavid Green 118d539357eSDavid Greenelse: 119d539357eSDavid Green ret i32 0 120d539357eSDavid Green} 121d539357eSDavid Green 122d539357eSDavid Greendefine i32 @add10_else(i32 %a) { 123d539357eSDavid Green; CHECK-LABEL: @add10_else( 124d539357eSDavid Green; CHECK-NEXT: entry: 125d539357eSDavid Green; CHECK-NEXT: [[C:%.*]] = icmp eq i32 [[A:%.*]], 10 126d539357eSDavid Green; CHECK-NEXT: br i1 [[C]], label [[THEN:%.*]], label [[ELSE:%.*]] 127d539357eSDavid Green; CHECK: then: 128d539357eSDavid Green; CHECK-NEXT: ret i32 0 129d539357eSDavid Green; CHECK: else: 130d539357eSDavid Green; CHECK-NEXT: [[L:%.*]] = add i32 [[A]], 10 131d539357eSDavid Green; CHECK-NEXT: ret i32 [[L]] 132d539357eSDavid Green; 133d539357eSDavid Greenentry: 134d539357eSDavid Green %c = icmp eq i32 %a, 10 135d539357eSDavid Green br i1 %c, label %then, label %else 136d539357eSDavid Green 137d539357eSDavid Greenthen: 138d539357eSDavid Green ret i32 0 139d539357eSDavid Green 140d539357eSDavid Greenelse: 141d539357eSDavid Green %l = add i32 %a, 10 142d539357eSDavid Green ret i32 %l 143d539357eSDavid Green} 144d539357eSDavid Green 145d539357eSDavid Greendefine i32 @addm10_then(i32 %a) { 146d539357eSDavid Green; CHECK-LABEL: @addm10_then( 147d539357eSDavid Green; CHECK-NEXT: entry: 148dd5c5202SDavid Green; CHECK-NEXT: [[L:%.*]] = add i32 [[A:%.*]], -10 149dd5c5202SDavid Green; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i32 [[L]], 0 150dd5c5202SDavid Green; CHECK-NEXT: br i1 [[TMP0]], label [[THEN:%.*]], label [[ELSE:%.*]] 151d539357eSDavid Green; CHECK: then: 152d539357eSDavid Green; CHECK-NEXT: ret i32 [[L]] 153d539357eSDavid Green; CHECK: else: 154d539357eSDavid Green; CHECK-NEXT: ret i32 0 155d539357eSDavid Green; 156d539357eSDavid Greenentry: 157d539357eSDavid Green %c = icmp eq i32 %a, 10 158d539357eSDavid Green br i1 %c, label %then, label %else 159d539357eSDavid Green 160d539357eSDavid Greenthen: 161d539357eSDavid Green %l = add i32 %a, -10 162d539357eSDavid Green ret i32 %l 163d539357eSDavid Green 164d539357eSDavid Greenelse: 165d539357eSDavid Green ret i32 0 166d539357eSDavid Green} 167d539357eSDavid Green 168d539357eSDavid Greendefine i32 @add_missmatch(i32 %a) { 169d539357eSDavid Green; CHECK-LABEL: @add_missmatch( 170d539357eSDavid Green; CHECK-NEXT: entry: 171d539357eSDavid Green; CHECK-NEXT: [[C:%.*]] = icmp eq i32 [[A:%.*]], 10 172d539357eSDavid Green; CHECK-NEXT: br i1 [[C]], label [[THEN:%.*]], label [[ELSE:%.*]] 173d539357eSDavid Green; CHECK: then: 174d539357eSDavid Green; CHECK-NEXT: [[L:%.*]] = add i32 [[A]], 10 175d539357eSDavid Green; CHECK-NEXT: ret i32 [[L]] 176d539357eSDavid Green; CHECK: else: 177d539357eSDavid Green; CHECK-NEXT: ret i32 0 178d539357eSDavid Green; 179d539357eSDavid Greenentry: 180d539357eSDavid Green %c = icmp eq i32 %a, 10 181d539357eSDavid Green br i1 %c, label %then, label %else 182d539357eSDavid Green 183d539357eSDavid Greenthen: 184d539357eSDavid Green %l = add i32 %a, 10 185d539357eSDavid Green ret i32 %l 186d539357eSDavid Green 187d539357eSDavid Greenelse: 188d539357eSDavid Green ret i32 0 189d539357eSDavid Green} 190d539357eSDavid Green 191d539357eSDavid Greendefine i32 @sub10_else(i32 %a) { 192d539357eSDavid Green; CHECK-LABEL: @sub10_else( 193d539357eSDavid Green; CHECK-NEXT: entry: 194dd5c5202SDavid Green; CHECK-NEXT: [[L:%.*]] = sub i32 [[A:%.*]], 10 195dd5c5202SDavid Green; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i32 [[L]], 0 196dd5c5202SDavid Green; CHECK-NEXT: br i1 [[TMP0]], label [[THEN:%.*]], label [[ELSE:%.*]] 197d539357eSDavid Green; CHECK: then: 198d539357eSDavid Green; CHECK-NEXT: ret i32 0 199d539357eSDavid Green; CHECK: else: 200d539357eSDavid Green; CHECK-NEXT: ret i32 [[L]] 201d539357eSDavid Green; 202d539357eSDavid Greenentry: 203d539357eSDavid Green %c = icmp eq i32 %a, 10 204d539357eSDavid Green br i1 %c, label %then, label %else 205d539357eSDavid Green 206d539357eSDavid Greenthen: 207d539357eSDavid Green ret i32 0 208d539357eSDavid Green 209d539357eSDavid Greenelse: 210d539357eSDavid Green %l = sub i32 %a, 10 211d539357eSDavid Green ret i32 %l 212d539357eSDavid Green} 213d539357eSDavid Green 214*ab12bba0SYingwei Zhengdefine i32 @sub10_else_drop_nuw(i32 %a) { 215*ab12bba0SYingwei Zheng; CHECK-LABEL: @sub10_else_drop_nuw( 216*ab12bba0SYingwei Zheng; CHECK-NEXT: entry: 217*ab12bba0SYingwei Zheng; CHECK-NEXT: [[L:%.*]] = sub i32 [[A:%.*]], 10 218*ab12bba0SYingwei Zheng; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i32 [[L]], 0 219*ab12bba0SYingwei Zheng; CHECK-NEXT: br i1 [[TMP0]], label [[THEN:%.*]], label [[ELSE:%.*]] 220*ab12bba0SYingwei Zheng; CHECK: then: 221*ab12bba0SYingwei Zheng; CHECK-NEXT: ret i32 0 222*ab12bba0SYingwei Zheng; CHECK: else: 223*ab12bba0SYingwei Zheng; CHECK-NEXT: ret i32 [[L]] 224*ab12bba0SYingwei Zheng; 225*ab12bba0SYingwei Zhengentry: 226*ab12bba0SYingwei Zheng %c = icmp eq i32 %a, 10 227*ab12bba0SYingwei Zheng br i1 %c, label %then, label %else 228*ab12bba0SYingwei Zheng 229*ab12bba0SYingwei Zhengthen: 230*ab12bba0SYingwei Zheng ret i32 0 231*ab12bba0SYingwei Zheng 232*ab12bba0SYingwei Zhengelse: 233*ab12bba0SYingwei Zheng %l = sub nuw i32 %a, 10 234*ab12bba0SYingwei Zheng ret i32 %l 235*ab12bba0SYingwei Zheng} 236*ab12bba0SYingwei Zheng 237d539357eSDavid Greendefine i32 @subm10_then(i32 %a) { 238d539357eSDavid Green; CHECK-LABEL: @subm10_then( 239d539357eSDavid Green; CHECK-NEXT: entry: 240dd5c5202SDavid Green; CHECK-NEXT: [[L:%.*]] = sub i32 [[A:%.*]], -10 241dd5c5202SDavid Green; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i32 [[L]], 0 242dd5c5202SDavid Green; CHECK-NEXT: br i1 [[TMP0]], label [[THEN:%.*]], label [[ELSE:%.*]] 243d539357eSDavid Green; CHECK: then: 244d539357eSDavid Green; CHECK-NEXT: ret i32 [[L]] 245d539357eSDavid Green; CHECK: else: 246d539357eSDavid Green; CHECK-NEXT: ret i32 0 247d539357eSDavid Green; 248d539357eSDavid Greenentry: 249d539357eSDavid Green %c = icmp eq i32 %a, -10 250d539357eSDavid Green br i1 %c, label %then, label %else 251d539357eSDavid Green 252d539357eSDavid Greenthen: 253d539357eSDavid Green %l = sub i32 %a, -10 254d539357eSDavid Green ret i32 %l 255d539357eSDavid Green 256d539357eSDavid Greenelse: 257d539357eSDavid Green ret i32 0 258d539357eSDavid Green} 259d539357eSDavid Green 260d539357eSDavid Greendefine i64 @lshr64(i64 %a) { 261d539357eSDavid Green; CHECK-LABEL: @lshr64( 262d539357eSDavid Green; CHECK-NEXT: entry: 263dd5c5202SDavid Green; CHECK-NEXT: [[L:%.*]] = lshr i64 [[A:%.*]], 40 264dd5c5202SDavid Green; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i64 [[L]], 0 265dd5c5202SDavid Green; CHECK-NEXT: br i1 [[TMP0]], label [[THEN:%.*]], label [[ELSE:%.*]] 266d539357eSDavid Green; CHECK: then: 267d539357eSDavid Green; CHECK-NEXT: ret i64 0 268d539357eSDavid Green; CHECK: else: 269d539357eSDavid Green; CHECK-NEXT: ret i64 [[L]] 270d539357eSDavid Green; 271d539357eSDavid Greenentry: 272d539357eSDavid Green %c = icmp ult i64 %a, 1099511627776 273d539357eSDavid Green br i1 %c, label %then, label %else 274d539357eSDavid Green 275d539357eSDavid Greenthen: 276d539357eSDavid Green ret i64 0 277d539357eSDavid Green 278d539357eSDavid Greenelse: 279d539357eSDavid Green %l = lshr i64 %a, 40 280d539357eSDavid Green ret i64 %l 281d539357eSDavid Green} 282d539357eSDavid Green 283d539357eSDavid Greendefine i128 @lshr128(i128 %a) { 284d539357eSDavid Green; CHECK-LABEL: @lshr128( 285d539357eSDavid Green; CHECK-NEXT: entry: 286dd5c5202SDavid Green; CHECK-NEXT: [[L:%.*]] = lshr i128 [[A:%.*]], 65 287dd5c5202SDavid Green; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i128 [[L]], 0 288dd5c5202SDavid Green; CHECK-NEXT: br i1 [[TMP0]], label [[THEN:%.*]], label [[ELSE:%.*]] 289d539357eSDavid Green; CHECK: then: 290d539357eSDavid Green; CHECK-NEXT: ret i128 0 291d539357eSDavid Green; CHECK: else: 292d539357eSDavid Green; CHECK-NEXT: ret i128 [[L]] 293d539357eSDavid Green; 294d539357eSDavid Greenentry: 295d539357eSDavid Green %c = icmp ult i128 %a, 36893488147419103232 296d539357eSDavid Green br i1 %c, label %then, label %else 297d539357eSDavid Green 298d539357eSDavid Greenthen: 299d539357eSDavid Green ret i128 0 300d539357eSDavid Green 301d539357eSDavid Greenelse: 302d539357eSDavid Green %l = lshr i128 %a, 65 303d539357eSDavid Green ret i128 %l 304d539357eSDavid Green} 305d539357eSDavid Green 306d539357eSDavid Greendefine i32 @addm1_dom(i32 %a) { 307d539357eSDavid Green; CHECK-LABEL: @addm1_dom( 308d539357eSDavid Green; CHECK-NEXT: entry: 309d539357eSDavid Green; CHECK-NEXT: [[C1:%.*]] = icmp eq i32 [[A:%.*]], 100 310d539357eSDavid Green; CHECK-NEXT: br i1 [[C1]], label [[IF:%.*]], label [[ELSE:%.*]] 311d539357eSDavid Green; CHECK: if: 312d539357eSDavid Green; CHECK-NEXT: [[C:%.*]] = icmp eq i32 [[A]], -1 313d539357eSDavid Green; CHECK-NEXT: br i1 [[C]], label [[THEN:%.*]], label [[ELSE]] 314d539357eSDavid Green; CHECK: then: 315d539357eSDavid Green; CHECK-NEXT: ret i32 0 316d539357eSDavid Green; CHECK: else: 317d539357eSDavid Green; CHECK-NEXT: [[L:%.*]] = add i32 [[A]], 1 318d539357eSDavid Green; CHECK-NEXT: ret i32 [[L]] 319d539357eSDavid Green; 320d539357eSDavid Greenentry: 321d539357eSDavid Green %c1 = icmp eq i32 %a, 100 322d539357eSDavid Green br i1 %c1, label %if, label %else 323d539357eSDavid Green 324d539357eSDavid Greenif: 325d539357eSDavid Green %c = icmp eq i32 %a, -1 326d539357eSDavid Green br i1 %c, label %then, label %else 327d539357eSDavid Green 328d539357eSDavid Greenthen: 329d539357eSDavid Green ret i32 0 330d539357eSDavid Green 331d539357eSDavid Greenelse: 332d539357eSDavid Green %l = add i32 %a, 1 333d539357eSDavid Green ret i32 %l 334d539357eSDavid Green} 335d539357eSDavid Green 336d539357eSDavid Greendeclare void @other() 337