xref: /llvm-project/llvm/test/Transforms/InstCombine/wcslen-6.ll (revision b19194c032e7640be0a482f20491341a62e7304f)
1*b19194c0SMartin Sebor; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*b19194c0SMartin Sebor;
3*b19194c0SMartin Sebor; Verify that wcslen calls with a constant argument of a nonintegral type
4*b19194c0SMartin Sebor; of the same size as wchar_t or bigger doesn't cause trouble and is folded
5*b19194c0SMartin Sebor; as expected.
6*b19194c0SMartin Sebor;
7*b19194c0SMartin Sebor; RUN: opt < %s -passes=instcombine -S | FileCheck %s
8*b19194c0SMartin Sebor
9*b19194c0SMartin Sebor!llvm.module.flags = !{!0}
10*b19194c0SMartin Sebor!0 = !{i32 1, !"wchar_size", i32 4}
11*b19194c0SMartin Sebor
12*b19194c0SMartin Sebordeclare i64 @wcslen(ptr)
13*b19194c0SMartin Sebor
14*b19194c0SMartin Sebor@af = constant [2 x float] [float 0x3FF3B2FEC0000000, float 0.0]
15*b19194c0SMartin Sebor
16*b19194c0SMartin Sebor; TODO: Fold wcslen(af) to a constant.
17*b19194c0SMartin Sebor
18*b19194c0SMartin Sebordefine i64 @fold_af() {
19*b19194c0SMartin Sebor; CHECK-LABEL: @fold_af(
20*b19194c0SMartin Sebor; CHECK-NEXT:    [[N:%.*]] = call i64 @wcslen(ptr nonnull @af)
21*b19194c0SMartin Sebor; CHECK-NEXT:    ret i64 [[N]]
22*b19194c0SMartin Sebor;
23*b19194c0SMartin Sebor  %n = call i64 @wcslen(ptr @af)
24*b19194c0SMartin Sebor  ret i64 %n
25*b19194c0SMartin Sebor}
26*b19194c0SMartin Sebor
27*b19194c0SMartin Sebor; TODO: Likewise, fold wcslen(as) to a constant.
28*b19194c0SMartin Sebor
29*b19194c0SMartin Sebor%struct.S = type { i32 }
30*b19194c0SMartin Sebor@aS = constant [3 x %struct.S] [%struct.S { i32 2 }, %struct.S { i32 1 }, %struct.S zeroinitializer]
31*b19194c0SMartin Sebor
32*b19194c0SMartin Sebordefine i64 @fold_aS() {
33*b19194c0SMartin Sebor; CHECK-LABEL: @fold_aS(
34*b19194c0SMartin Sebor; CHECK-NEXT:    [[N:%.*]] = call i64 @wcslen(ptr nonnull @aS)
35*b19194c0SMartin Sebor; CHECK-NEXT:    ret i64 [[N]]
36*b19194c0SMartin Sebor;
37*b19194c0SMartin Sebor  %n = call i64 @wcslen(ptr @aS)
38*b19194c0SMartin Sebor  ret i64 %n
39*b19194c0SMartin Sebor}
40