56 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4target triple = "x86_64-unknown-freebsd11.0"5 6define i32 @myfls() {7; CHECK-LABEL: @myfls(8; CHECK-NEXT: ret i32 69;10 %call = call i32 @fls(i32 42)11 ret i32 %call12}13 14define i32 @myflsl() {15; CHECK-LABEL: @myflsl(16; CHECK-NEXT: ret i32 617;18 %patatino = call i32 @flsl(i64 42)19 ret i32 %patatino20}21 22define i32 @myflsll() {23; CHECK-LABEL: @myflsll(24; CHECK-NEXT: ret i32 625;26 %whatever = call i32 @flsll(i64 42)27 ret i32 %whatever28}29 30; Lower to llvm.ctlz() if the argument is not a constant31 32define i32 @flsnotconst(i64 %z) {33; CHECK-LABEL: @flsnotconst(34; CHECK-NEXT: [[CTLZ:%.*]] = call range(i64 0, 65) i64 @llvm.ctlz.i64(i64 [[Z:%.*]], i1 false)35; CHECK-NEXT: [[TMP1:%.*]] = trunc nuw nsw i64 [[CTLZ]] to i3236; CHECK-NEXT: [[GOO:%.*]] = sub nsw i32 64, [[TMP1]]37; CHECK-NEXT: ret i32 [[GOO]]38;39 %goo = call i32 @flsl(i64 %z)40 ret i32 %goo41}42 43; Make sure we lower fls(0) to 0 and not to `undef`.44 45define i32 @flszero() {46; CHECK-LABEL: @flszero(47; CHECK-NEXT: ret i32 048;49 %zero = call i32 @fls(i32 0)50 ret i32 %zero51}52 53declare i32 @fls(i32)54declare i32 @flsl(i64)55declare i32 @flsll(i64)56