annotate llvm/test/Transforms/CodeGenPrepare/X86/cttz-ctlz.ll @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents c4bab56944e8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
236
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
150
anatofuz
parents:
diff changeset
2 ; RUN: opt -S -codegenprepare < %s | FileCheck %s --check-prefix=SLOW
anatofuz
parents:
diff changeset
3 ; RUN: opt -S -codegenprepare -mattr=+bmi < %s | FileCheck %s --check-prefix=FAST_TZ
anatofuz
parents:
diff changeset
4 ; RUN: opt -S -codegenprepare -mattr=+lzcnt < %s | FileCheck %s --check-prefix=FAST_LZ
anatofuz
parents:
diff changeset
5
anatofuz
parents:
diff changeset
6 target triple = "x86_64-unknown-unknown"
anatofuz
parents:
diff changeset
7 target datalayout = "e-n32:64"
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 ; If the intrinsic is cheap, nothing should change.
236
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
10 ; If the intrinsic is expensive, check if the input is zero to avoid the call.
150
anatofuz
parents:
diff changeset
11 ; This is undoing speculation that may have been created by SimplifyCFG + InstCombine.
anatofuz
parents:
diff changeset
12
anatofuz
parents:
diff changeset
13 define i64 @cttz(i64 %A) {
236
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
14 ; SLOW-LABEL: @cttz(
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
15 ; SLOW-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
16 ; SLOW-NEXT: [[A_FR:%.*]] = freeze i64 [[A:%.*]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
17 ; SLOW-NEXT: [[CMPZ:%.*]] = icmp eq i64 [[A_FR]], 0
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
18 ; SLOW-NEXT: br i1 [[CMPZ]], label [[COND_END:%.*]], label [[COND_FALSE:%.*]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
19 ; SLOW: cond.false:
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
20 ; SLOW-NEXT: [[Z:%.*]] = call i64 @llvm.cttz.i64(i64 [[A_FR]], i1 true)
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
21 ; SLOW-NEXT: br label [[COND_END]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
22 ; SLOW: cond.end:
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
23 ; SLOW-NEXT: [[CTZ:%.*]] = phi i64 [ 64, [[ENTRY:%.*]] ], [ [[Z]], [[COND_FALSE]] ]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
24 ; SLOW-NEXT: ret i64 [[CTZ]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
25 ;
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
26 ; FAST_TZ-LABEL: @cttz(
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
27 ; FAST_TZ-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
28 ; FAST_TZ-NEXT: [[Z:%.*]] = call i64 @llvm.cttz.i64(i64 [[A:%.*]], i1 false)
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
29 ; FAST_TZ-NEXT: ret i64 [[Z]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
30 ;
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
31 ; FAST_LZ-LABEL: @cttz(
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
32 ; FAST_LZ-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
33 ; FAST_LZ-NEXT: [[A_FR:%.*]] = freeze i64 [[A:%.*]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
34 ; FAST_LZ-NEXT: [[CMPZ:%.*]] = icmp eq i64 [[A_FR]], 0
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
35 ; FAST_LZ-NEXT: br i1 [[CMPZ]], label [[COND_END:%.*]], label [[COND_FALSE:%.*]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
36 ; FAST_LZ: cond.false:
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
37 ; FAST_LZ-NEXT: [[Z:%.*]] = call i64 @llvm.cttz.i64(i64 [[A_FR]], i1 true)
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
38 ; FAST_LZ-NEXT: br label [[COND_END]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
39 ; FAST_LZ: cond.end:
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
40 ; FAST_LZ-NEXT: [[CTZ:%.*]] = phi i64 [ 64, [[ENTRY:%.*]] ], [ [[Z]], [[COND_FALSE]] ]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
41 ; FAST_LZ-NEXT: ret i64 [[CTZ]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
42 ;
150
anatofuz
parents:
diff changeset
43 entry:
anatofuz
parents:
diff changeset
44 %z = call i64 @llvm.cttz.i64(i64 %A, i1 false)
anatofuz
parents:
diff changeset
45 ret i64 %z
anatofuz
parents:
diff changeset
46 }
anatofuz
parents:
diff changeset
47
anatofuz
parents:
diff changeset
48 define i64 @ctlz(i64 %A) {
236
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
49 ; SLOW-LABEL: @ctlz(
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
50 ; SLOW-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
51 ; SLOW-NEXT: [[A_FR:%.*]] = freeze i64 [[A:%.*]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
52 ; SLOW-NEXT: [[CMPZ:%.*]] = icmp eq i64 [[A_FR]], 0
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
53 ; SLOW-NEXT: br i1 [[CMPZ]], label [[COND_END:%.*]], label [[COND_FALSE:%.*]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
54 ; SLOW: cond.false:
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
55 ; SLOW-NEXT: [[Z:%.*]] = call i64 @llvm.ctlz.i64(i64 [[A_FR]], i1 true)
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
56 ; SLOW-NEXT: br label [[COND_END]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
57 ; SLOW: cond.end:
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
58 ; SLOW-NEXT: [[CTZ:%.*]] = phi i64 [ 64, [[ENTRY:%.*]] ], [ [[Z]], [[COND_FALSE]] ]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
59 ; SLOW-NEXT: ret i64 [[CTZ]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
60 ;
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
61 ; FAST_TZ-LABEL: @ctlz(
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
62 ; FAST_TZ-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
63 ; FAST_TZ-NEXT: [[A_FR:%.*]] = freeze i64 [[A:%.*]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
64 ; FAST_TZ-NEXT: [[CMPZ:%.*]] = icmp eq i64 [[A_FR]], 0
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
65 ; FAST_TZ-NEXT: br i1 [[CMPZ]], label [[COND_END:%.*]], label [[COND_FALSE:%.*]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
66 ; FAST_TZ: cond.false:
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
67 ; FAST_TZ-NEXT: [[Z:%.*]] = call i64 @llvm.ctlz.i64(i64 [[A_FR]], i1 true)
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
68 ; FAST_TZ-NEXT: br label [[COND_END]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
69 ; FAST_TZ: cond.end:
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
70 ; FAST_TZ-NEXT: [[CTZ:%.*]] = phi i64 [ 64, [[ENTRY:%.*]] ], [ [[Z]], [[COND_FALSE]] ]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
71 ; FAST_TZ-NEXT: ret i64 [[CTZ]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
72 ;
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
73 ; FAST_LZ-LABEL: @ctlz(
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
74 ; FAST_LZ-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
75 ; FAST_LZ-NEXT: [[Z:%.*]] = call i64 @llvm.ctlz.i64(i64 [[A:%.*]], i1 false)
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
76 ; FAST_LZ-NEXT: ret i64 [[Z]]
c4bab56944e8 LLVM 16
kono
parents: 150
diff changeset
77 ;
150
anatofuz
parents:
diff changeset
78 entry:
anatofuz
parents:
diff changeset
79 %z = call i64 @llvm.ctlz.i64(i64 %A, i1 false)
anatofuz
parents:
diff changeset
80 ret i64 %z
anatofuz
parents:
diff changeset
81 }
anatofuz
parents:
diff changeset
82
anatofuz
parents:
diff changeset
83 declare i64 @llvm.cttz.i64(i64, i1)
anatofuz
parents:
diff changeset
84 declare i64 @llvm.ctlz.i64(i64, i1)
anatofuz
parents:
diff changeset
85