brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 7af563f Raw
96 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 22; RUN: opt < %s -passes=ipsccp -S | FileCheck %s3 4declare void @llvm.assume(i1)5declare i8 @llvm.ctpop.i8(i8)6 7; https://alive2.llvm.org/ce/z/LV_8xy8define i8 @and_add_shl(i8 %x) {9; CHECK-LABEL: define i8 @and_add_shl10; CHECK-SAME: (i8 [[X:%.*]]) {11; CHECK-NEXT:    [[OP1_P2:%.*]] = icmp ule i8 [[X]], 512; CHECK-NEXT:    call void @llvm.assume(i1 [[OP1_P2]])13; CHECK-NEXT:    [[SHIFT:%.*]] = shl nuw nsw i8 1, [[X]]14; CHECK-NEXT:    [[SUB:%.*]] = add nsw i8 [[SHIFT]], -115; CHECK-NEXT:    ret i8 016;17  %op1_p2 = icmp ule i8 %x, 518  call void @llvm.assume(i1 %op1_p2)19  %shift = shl i8 1, %x20  %sub = add i8 %shift, -121  %r = and i8 %sub, 3222  ret i8 %r23}24 25; https://alive2.llvm.org/ce/z/YNYYdV26define i8 @and_not_shl(i8 %x) {27; CHECK-LABEL: define i8 @and_not_shl28; CHECK-SAME: (i8 [[X:%.*]]) {29; CHECK-NEXT:    [[OP1_P2:%.*]] = icmp ule i8 [[X]], 530; CHECK-NEXT:    call void @llvm.assume(i1 [[OP1_P2]])31; CHECK-NEXT:    [[SHIFT:%.*]] = shl nsw i8 -1, [[X]]32; CHECK-NEXT:    [[NOT:%.*]] = xor i8 [[SHIFT]], -133; CHECK-NEXT:    ret i8 034;35  %op1_p2 = icmp ule i8 %x, 536  call void @llvm.assume(i1 %op1_p2)37  %shift = shl i8 -1, %x38  %not = xor i8 %shift, -139  %r = and i8 %not, 3240  ret i8 %r41}42 43define i8 @and_not_shl_1(i8 %x) {44; CHECK-LABEL: define i8 @and_not_shl_145; CHECK-SAME: (i8 [[X:%.*]]) {46; CHECK-NEXT:    [[OP1_P2:%.*]] = icmp ule i8 [[X]], 447; CHECK-NEXT:    call void @llvm.assume(i1 [[OP1_P2]])48; CHECK-NEXT:    [[SHIFT:%.*]] = shl nsw i8 -1, [[X]]49; CHECK-NEXT:    [[NOT:%.*]] = xor i8 [[SHIFT]], -150; CHECK-NEXT:    ret i8 051;52  %op1_p2 = icmp ule i8 %x, 453  call void @llvm.assume(i1 %op1_p2)54  %shift = shl i8 -1, %x55  %not = xor i8 %shift, -156  %r = and i8 %not, 48 ;    3 * 1657  ret i8 %r58}59 60; Negative test: https://alive2.llvm.org/ce/z/Zv4Pyu61define i8 @and_add_shl_overlap(i8 %x) {62; CHECK-LABEL: define range(i8 0, 33) i8 @and_add_shl_overlap63; CHECK-SAME: (i8 [[X:%.*]]) {64; CHECK-NEXT:    [[OP1_P2:%.*]] = icmp ule i8 [[X]], 665; CHECK-NEXT:    call void @llvm.assume(i1 [[OP1_P2]])66; CHECK-NEXT:    [[SHIFT:%.*]] = shl nuw nsw i8 1, [[X]]67; CHECK-NEXT:    [[SUB:%.*]] = add nsw i8 [[SHIFT]], -168; CHECK-NEXT:    [[R:%.*]] = and i8 [[SUB]], 3269; CHECK-NEXT:    ret i8 [[R]]70;71  %op1_p2 = icmp ule i8 %x, 672  call void @llvm.assume(i1 %op1_p2)73  %shift = shl i8 1, %x74  %sub = add i8 %shift, -175  %r = and i8 %sub, 32  ; expect 6476  ret i8 %r77}78 79define i8 @and_not_shl_overlap(i8 %x) {80; CHECK-LABEL: define range(i8 0, 5) i8 @and_not_shl_overlap81; CHECK-SAME: (i8 [[X:%.*]]) {82; CHECK-NEXT:    [[OP1_P2:%.*]] = icmp ule i8 [[X]], 383; CHECK-NEXT:    call void @llvm.assume(i1 [[OP1_P2]])84; CHECK-NEXT:    [[SHIFT:%.*]] = shl nsw i8 -1, [[X]]85; CHECK-NEXT:    [[NOT:%.*]] = xor i8 [[SHIFT]], -186; CHECK-NEXT:    [[R:%.*]] = and i8 [[NOT]], 487; CHECK-NEXT:    ret i8 [[R]]88;89  %op1_p2 = icmp ule i8 %x, 390  call void @llvm.assume(i1 %op1_p2)91  %shift = shl i8 -1, %x92  %not = xor i8 %shift, -193  %r = and i8 %not, 4   ; expect 894  ret i8 %r95}96