[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / Transforms / SimplifyCFG / ARM / cttz-ctlz.ll
blob22f5e9f3cc1dce6c091dddeaddf3073bdc40e05d
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -S -simplifycfg -mtriple=arm -mattr=+v6t2 < %s | FileCheck %s
4 define i32 @ctlz(i32 %A) {
5 ; CHECK-LABEL: @ctlz(
6 ; CHECK-NEXT:  entry:
7 ; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq i32 [[A:%.*]], 0
8 ; CHECK-NEXT:    [[TMP0:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[A]], i1 true)
9 ; CHECK-NEXT:    [[SPEC_SELECT:%.*]] = select i1 [[TOBOOL]], i32 32, i32 [[TMP0]]
10 ; CHECK-NEXT:    ret i32 [[SPEC_SELECT]]
12 entry:
13   %tobool = icmp eq i32 %A, 0
14   br i1 %tobool, label %cond.end, label %cond.true
16 cond.true:
17   %0 = tail call i32 @llvm.ctlz.i32(i32 %A, i1 true)
18   br label %cond.end
20 cond.end:
21   %cond = phi i32 [ %0, %cond.true ], [ 32, %entry ]
22   ret i32 %cond
25 define i32 @cttz(i32 %A) {
26 ; CHECK-LABEL: @cttz(
27 ; CHECK-NEXT:  entry:
28 ; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq i32 [[A:%.*]], 0
29 ; CHECK-NEXT:    [[TMP0:%.*]] = tail call i32 @llvm.cttz.i32(i32 [[A]], i1 true)
30 ; CHECK-NEXT:    [[SPEC_SELECT:%.*]] = select i1 [[TOBOOL]], i32 32, i32 [[TMP0]]
31 ; CHECK-NEXT:    ret i32 [[SPEC_SELECT]]
33 entry:
34   %tobool = icmp eq i32 %A, 0
35   br i1 %tobool, label %cond.end, label %cond.true
37 cond.true:
38   %0 = tail call i32 @llvm.cttz.i32(i32 %A, i1 true)
39   br label %cond.end
41 cond.end:
42   %cond = phi i32 [ %0, %cond.true ], [ 32, %entry ]
43   ret i32 %cond
46 declare i32 @llvm.ctlz.i32(i32, i1)
47 declare i32 @llvm.cttz.i32(i32, i1)