xref: /llvm-project/llvm/test/Transforms/InstSimplify/bitreverse.ll (revision b280ee1dd7e9b36ae7aaa3953556e4b7a7f31a29)
19c6458ecSSimon Pilgrim; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*b280ee1dSBjorn Pettersson; RUN: opt < %s -S -passes=instsimplify | FileCheck %s
3cee313d2SEric Christopher
4cee313d2SEric Christopherdeclare i32 @llvm.bitreverse.i32(i32)
59c6458ecSSimon Pilgrimdeclare <2 x i32> @llvm.bitreverse.v2i32(<2 x i32>)
6cee313d2SEric Christopher
7cee313d2SEric Christopherdefine i1 @test1(i32 %arg) {
89c6458ecSSimon Pilgrim; CHECK-LABEL: @test1(
99c6458ecSSimon Pilgrim; CHECK-NEXT:    ret i1 false
109c6458ecSSimon Pilgrim;
11cee313d2SEric Christopher  %a = or i32 %arg, 1
12cee313d2SEric Christopher  %b = call i32 @llvm.bitreverse.i32(i32 %a)
13cee313d2SEric Christopher  %res = icmp eq i32 %b, 0
14cee313d2SEric Christopher  ret i1 %res
15cee313d2SEric Christopher}
16cee313d2SEric Christopher
179c6458ecSSimon Pilgrimdefine i1 @test1v(<2 x i32> %arg) {
189c6458ecSSimon Pilgrim; CHECK-LABEL: @test1v(
191010c44bSSimon Pilgrim; CHECK-NEXT:    ret i1 false
209c6458ecSSimon Pilgrim;
219c6458ecSSimon Pilgrim  %a = or <2 x i32> %arg, <i32 1, i32 0>
229c6458ecSSimon Pilgrim  %b = call <2 x i32> @llvm.bitreverse.v2i32(<2 x i32> %a)
239c6458ecSSimon Pilgrim  %c = extractelement <2 x i32> %b, i32 0
249c6458ecSSimon Pilgrim  %res = icmp eq i32 %c, 0
259c6458ecSSimon Pilgrim  ret i1 %res
269c6458ecSSimon Pilgrim}
279c6458ecSSimon Pilgrim
28cee313d2SEric Christopherdefine i1 @test2(i32 %arg) {
299c6458ecSSimon Pilgrim; CHECK-LABEL: @test2(
309c6458ecSSimon Pilgrim; CHECK-NEXT:    ret i1 false
319c6458ecSSimon Pilgrim;
32cee313d2SEric Christopher  %a = or i32 %arg, 1024
33cee313d2SEric Christopher  %b = call i32 @llvm.bitreverse.i32(i32 %a)
34cee313d2SEric Christopher  %res = icmp eq i32 %b, 0
35cee313d2SEric Christopher  ret i1 %res
36cee313d2SEric Christopher}
37cee313d2SEric Christopher
389c6458ecSSimon Pilgrimdefine i1 @test2v(<2 x i32> %arg) {
399c6458ecSSimon Pilgrim; CHECK-LABEL: @test2v(
401010c44bSSimon Pilgrim; CHECK-NEXT:    ret i1 false
419c6458ecSSimon Pilgrim;
429c6458ecSSimon Pilgrim  %a = or <2 x i32> %arg, <i32 0, i32 1024>
439c6458ecSSimon Pilgrim  %b = call <2 x i32> @llvm.bitreverse.v2i32(<2 x i32> %a)
449c6458ecSSimon Pilgrim  %c = extractelement <2 x i32> %b, i32 1
459c6458ecSSimon Pilgrim  %res = icmp eq i32 %c, 0
469c6458ecSSimon Pilgrim  ret i1 %res
479c6458ecSSimon Pilgrim}
489c6458ecSSimon Pilgrim
49cee313d2SEric Christopherdefine i1 @test3(i32 %arg) {
509c6458ecSSimon Pilgrim; CHECK-LABEL: @test3(
519c6458ecSSimon Pilgrim; CHECK-NEXT:    ret i1 false
529c6458ecSSimon Pilgrim;
53cee313d2SEric Christopher  %a = and i32 %arg, 1
54cee313d2SEric Christopher  %b = call i32 @llvm.bitreverse.i32(i32 %a)
55cee313d2SEric Christopher  %and = and i32 %b, 1
56cee313d2SEric Christopher  %res = icmp eq i32 %and, 1
57cee313d2SEric Christopher  ret i1 %res
58cee313d2SEric Christopher}
599c6458ecSSimon Pilgrim
609c6458ecSSimon Pilgrimdefine i1 @test3v(<2 x i32> %arg) {
619c6458ecSSimon Pilgrim; CHECK-LABEL: @test3v(
621010c44bSSimon Pilgrim; CHECK-NEXT:    ret i1 false
639c6458ecSSimon Pilgrim;
649c6458ecSSimon Pilgrim  %a = and <2 x i32> %arg, <i32 1, i32 -1>
659c6458ecSSimon Pilgrim  %b = call <2 x i32> @llvm.bitreverse.v2i32(<2 x i32> %a)
669c6458ecSSimon Pilgrim  %and = and <2 x i32> %b, <i32 1, i32 -1>
679c6458ecSSimon Pilgrim  %ext = extractelement <2 x i32> %and, i32 0
689c6458ecSSimon Pilgrim  %res = icmp eq i32 %ext, 1
699c6458ecSSimon Pilgrim  ret i1 %res
709c6458ecSSimon Pilgrim}
71