xref: /llvm-project/llvm/test/CodeGen/PowerPC/pr85066.ll (revision 47fd32f81c593ae698765e3f3f13998ac9a9abbf)
1*47fd32f8SYingwei Zheng; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2*47fd32f8SYingwei Zheng; RUN: llc -mtriple=powerpc64le < %s | FileCheck %s
3*47fd32f8SYingwei Zheng
4*47fd32f8SYingwei Zheng; Tests from pr85066
5*47fd32f8SYingwei Zhengdefine i64 @test_shl_zext_cttz(i16 %x) {
6*47fd32f8SYingwei Zheng; CHECK-LABEL: test_shl_zext_cttz:
7*47fd32f8SYingwei Zheng; CHECK:       # %bb.0: # %entry
8*47fd32f8SYingwei Zheng; CHECK-NEXT:    oris 3, 3, 1
9*47fd32f8SYingwei Zheng; CHECK-NEXT:    neg 4, 3
10*47fd32f8SYingwei Zheng; CHECK-NEXT:    and 3, 3, 4
11*47fd32f8SYingwei Zheng; CHECK-NEXT:    clrldi 3, 3, 32
12*47fd32f8SYingwei Zheng; CHECK-NEXT:    blr
13*47fd32f8SYingwei Zhengentry:
14*47fd32f8SYingwei Zheng  %cttz = tail call i16 @llvm.cttz.i16(i16 %x, i1 false)
15*47fd32f8SYingwei Zheng  %zext = zext i16 %cttz to i64
16*47fd32f8SYingwei Zheng  %res = shl i64 1, %zext
17*47fd32f8SYingwei Zheng  ret i64 %res
18*47fd32f8SYingwei Zheng}
19*47fd32f8SYingwei Zheng
20*47fd32f8SYingwei Zhengdefine i64 @test_shl_zext_cttz_zero_is_poison(i16 %x) {
21*47fd32f8SYingwei Zheng; CHECK-LABEL: test_shl_zext_cttz_zero_is_poison:
22*47fd32f8SYingwei Zheng; CHECK:       # %bb.0: # %entry
23*47fd32f8SYingwei Zheng; CHECK-NEXT:    neg 4, 3
24*47fd32f8SYingwei Zheng; CHECK-NEXT:    and 3, 3, 4
25*47fd32f8SYingwei Zheng; CHECK-NEXT:    clrldi 3, 3, 32
26*47fd32f8SYingwei Zheng; CHECK-NEXT:    blr
27*47fd32f8SYingwei Zhengentry:
28*47fd32f8SYingwei Zheng  %cttz = tail call i16 @llvm.cttz.i16(i16 %x, i1 true)
29*47fd32f8SYingwei Zheng  %zext = zext i16 %cttz to i64
30*47fd32f8SYingwei Zheng  %res = shl i64 1, %zext
31*47fd32f8SYingwei Zheng  ret i64 %res
32*47fd32f8SYingwei Zheng}
33*47fd32f8SYingwei Zheng
34*47fd32f8SYingwei Zhengdefine i16 @test_shl_trunc_cttz(i32 %x) {
35*47fd32f8SYingwei Zheng; CHECK-LABEL: test_shl_trunc_cttz:
36*47fd32f8SYingwei Zheng; CHECK:       # %bb.0: # %entry
37*47fd32f8SYingwei Zheng; CHECK-NEXT:    neg 4, 3
38*47fd32f8SYingwei Zheng; CHECK-NEXT:    and 3, 3, 4
39*47fd32f8SYingwei Zheng; CHECK-NEXT:    blr
40*47fd32f8SYingwei Zhengentry:
41*47fd32f8SYingwei Zheng  %cttz = tail call i32 @llvm.cttz.i32(i32 %x, i1 false)
42*47fd32f8SYingwei Zheng  %trunc = trunc i32 %cttz to i16
43*47fd32f8SYingwei Zheng  %res = shl i16 1, %trunc
44*47fd32f8SYingwei Zheng  ret i16 %res
45*47fd32f8SYingwei Zheng}
46