brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · a8683e5 Raw
59 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -S -passes=instcombine | FileCheck %s3 4declare i8 @llvm.bitreverse.i8(i8)5declare i32 @llvm.bitreverse.i32(i32)6 7define i1 @test1(i32 %arg) {8; CHECK-LABEL: @test1(9; CHECK-NEXT:    ret i1 true10;11  %a = or i32 %arg, 429490176012  %b = call i32 @llvm.bitreverse.i32(i32 %a)13  %and = and i32 %b, 6553514  %res = icmp eq i32 %and, 6553515  ret i1 %res16}17 18define i1 @test2(i32 %arg) {19; CHECK-LABEL: @test2(20; CHECK-NEXT:    ret i1 true21;22  %a = or i32 %arg, 123  %b = call i32 @llvm.bitreverse.i32(i32 %a)24  %c = and i32 %b, 214748364825  %d = call i32 @llvm.bitreverse.i32(i32 %c)26  %res = icmp eq i32 %d, 127  ret i1 %res28}29 30define i1 @test3(i32 %arg) {31; CHECK-LABEL: @test3(32; CHECK-NEXT:    ret i1 false33;34  %a = or i32 %arg, 6553635  %b = call i32 @llvm.bitreverse.i32(i32 %a)36  %and = and i32 %b, 3276837  %res = icmp eq i32 %and, 038  ret i1 %res39}40 41; known bits for the bitreverse will say the result is in the range [0, 64)42; but the metadata says [0, 16). So make sure the range metadata wins.43;    add %reverse, 1111 000044; should become45;    or  %reverse, 1111 000046 47define i8 @add_bitreverse(i8 %a) {48; CHECK-LABEL: @add_bitreverse(49; CHECK-NEXT:    [[TMP1:%.*]] = or i8 [[A:%.*]], 1550; CHECK-NEXT:    [[C:%.*]] = call i8 @llvm.bitreverse.i8(i8 [[TMP1]])51; CHECK-NEXT:    ret i8 [[C]]52;53  %b = and i8 %a, 25254  %reverse = call i8 @llvm.bitreverse.i8(i8 %b), !range !155  %c = add i8 %reverse, -1656  ret i8 %c57}58!1 = !{i8 0, i8 16}59