target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
-declare i64 @wcslen(i32*)
+declare i64 @wcslen(ptr)
!0 = !{i32 1, !"wchar_size", i32 4}
!llvm.module.flags = !{!0}
; CHECK-LABEL: @test_simplify1(
; CHECK-NEXT: ret i64 5
;
- %hello_p = getelementptr [6 x i32], [6 x i32]* @hello, i64 0, i64 0
- %hello_l = call i64 @wcslen(i32* %hello_p)
+ %hello_l = call i64 @wcslen(ptr @hello)
ret i64 %hello_l
}
; CHECK-LABEL: @test_simplify2(
; CHECK-NEXT: ret i64 0
;
- %null_p = getelementptr [1 x i32], [1 x i32]* @null, i64 0, i64 0
- %null_l = call i64 @wcslen(i32* %null_p)
+ %null_l = call i64 @wcslen(ptr @null)
ret i64 %null_l
}
; CHECK-LABEL: @test_simplify3(
; CHECK-NEXT: ret i64 0
;
- %null_hello_p = getelementptr [7 x i32], [7 x i32]* @null_hello, i64 0, i64 0
- %null_hello_l = call i64 @wcslen(i32* %null_hello_p)
+ %null_hello_l = call i64 @wcslen(ptr @null_hello)
ret i64 %null_hello_l
}
; CHECK-LABEL: @test_simplify4(
; CHECK-NEXT: ret i64 0
;
- %len = tail call i64 @wcslen(i32* @nullstring) nounwind
+ %len = tail call i64 @wcslen(ptr @nullstring) nounwind
ret i64 %len
}
; CHECK-LABEL: @test_simplify5(
; CHECK-NEXT: ret i1 false
;
- %hello_p = getelementptr [6 x i32], [6 x i32]* @hello, i64 0, i64 0
- %hello_l = call i64 @wcslen(i32* %hello_p)
+ %hello_l = call i64 @wcslen(ptr @hello)
%eq_hello = icmp eq i64 %hello_l, 0
ret i1 %eq_hello
}
-define i1 @test_simplify6(i32* %str_p) {
+define i1 @test_simplify6(ptr %str_p) {
; CHECK-LABEL: @test_simplify6(
-; CHECK-NEXT: [[CHAR0:%.*]] = load i32, i32* [[STR_P:%.*]], align 4
+; CHECK-NEXT: [[CHAR0:%.*]] = load i32, ptr [[STR_P:%.*]], align 4
; CHECK-NEXT: [[EQ_NULL:%.*]] = icmp eq i32 [[CHAR0]], 0
; CHECK-NEXT: ret i1 [[EQ_NULL]]
;
- %str_l = call i64 @wcslen(i32* %str_p)
+ %str_l = call i64 @wcslen(ptr %str_p)
%eq_null = icmp eq i64 %str_l, 0
ret i1 %eq_null
}
; CHECK-LABEL: @test_simplify7(
; CHECK-NEXT: ret i1 true
;
- %hello_p = getelementptr [6 x i32], [6 x i32]* @hello, i64 0, i64 0
- %hello_l = call i64 @wcslen(i32* %hello_p)
+ %hello_l = call i64 @wcslen(ptr @hello)
%ne_hello = icmp ne i64 %hello_l, 0
ret i1 %ne_hello
}
-define i1 @test_simplify8(i32* %str_p) {
+define i1 @test_simplify8(ptr %str_p) {
; CHECK-LABEL: @test_simplify8(
-; CHECK-NEXT: [[CHAR0:%.*]] = load i32, i32* [[STR_P:%.*]], align 4
+; CHECK-NEXT: [[CHAR0:%.*]] = load i32, ptr [[STR_P:%.*]], align 4
; CHECK-NEXT: [[NE_NULL:%.*]] = icmp ne i32 [[CHAR0]], 0
; CHECK-NEXT: ret i1 [[NE_NULL]]
;
- %str_l = call i64 @wcslen(i32* %str_p)
+ %str_l = call i64 @wcslen(ptr %str_p)
%ne_null = icmp ne i64 %str_l, 0
ret i1 %ne_null
}
; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[X:%.*]], i64 5, i64 6
; CHECK-NEXT: ret i64 [[TMP1]]
;
- %hello = getelementptr [6 x i32], [6 x i32]* @hello, i64 0, i64 0
- %longer = getelementptr [7 x i32], [7 x i32]* @longer, i64 0, i64 0
- %s = select i1 %x, i32* %hello, i32* %longer
- %l = call i64 @wcslen(i32* %s)
+ %s = select i1 %x, ptr @hello, ptr @longer
+ %l = call i64 @wcslen(ptr %s)
ret i64 %l
}
; CHECK-NEXT: [[TMP2:%.*]] = sub nsw i64 5, [[TMP1]]
; CHECK-NEXT: ret i64 [[TMP2]]
;
- %hello_p = getelementptr inbounds [6 x i32], [6 x i32]* @hello, i32 0, i32 %x
- %hello_l = call i64 @wcslen(i32* %hello_p)
+ %hello_p = getelementptr inbounds [6 x i32], ptr @hello, i32 0, i32 %x
+ %hello_l = call i64 @wcslen(ptr %hello_p)
ret i64 %hello_l
}
; CHECK-NEXT: ret i64 [[TMP1]]
;
%and = and i32 %x, 7
- %hello_p = getelementptr inbounds [13 x i32], [13 x i32]* @null_hello_mid, i32 0, i32 %and
- %hello_l = call i64 @wcslen(i32* %hello_p)
+ %hello_p = getelementptr inbounds [13 x i32], ptr @null_hello_mid, i32 0, i32 %and
+ %hello_l = call i64 @wcslen(ptr %hello_p)
ret i64 %hello_l
}
define i64 @test_no_simplify1() {
; CHECK-LABEL: @test_no_simplify1(
-; CHECK-NEXT: [[A_L:%.*]] = call i64 @wcslen(i32* nonnull getelementptr inbounds ([32 x i32], [32 x i32]* @a, i64 0, i64 0))
+; CHECK-NEXT: [[A_L:%.*]] = call i64 @wcslen(ptr nonnull @a)
; CHECK-NEXT: ret i64 [[A_L]]
;
- %a_p = getelementptr [32 x i32], [32 x i32]* @a, i64 0, i64 0
- %a_l = call i64 @wcslen(i32* %a_p)
+ %a_l = call i64 @wcslen(ptr @a)
ret i64 %a_l
}
define i64 @test_no_simplify2(i32 %x) {
; CHECK-LABEL: @test_no_simplify2(
; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[X:%.*]] to i64
-; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [7 x i32], [7 x i32]* @null_hello, i64 0, i64 [[TMP1]]
-; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(i32* nonnull [[HELLO_P]])
+; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [7 x i32], ptr @null_hello, i64 0, i64 [[TMP1]]
+; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(ptr nonnull [[HELLO_P]])
; CHECK-NEXT: ret i64 [[HELLO_L]]
;
- %hello_p = getelementptr inbounds [7 x i32], [7 x i32]* @null_hello, i32 0, i32 %x
- %hello_l = call i64 @wcslen(i32* %hello_p)
+ %hello_p = getelementptr inbounds [7 x i32], ptr @null_hello, i32 0, i32 %x
+ %hello_l = call i64 @wcslen(ptr %hello_p)
ret i64 %hello_l
}
define i64 @test_no_simplify2_no_null_opt(i32 %x) #0 {
; CHECK-LABEL: @test_no_simplify2_no_null_opt(
; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[X:%.*]] to i64
-; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [7 x i32], [7 x i32]* @null_hello, i64 0, i64 [[TMP1]]
-; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(i32* [[HELLO_P]])
+; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [7 x i32], ptr @null_hello, i64 0, i64 [[TMP1]]
+; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(ptr [[HELLO_P]])
; CHECK-NEXT: ret i64 [[HELLO_L]]
;
- %hello_p = getelementptr inbounds [7 x i32], [7 x i32]* @null_hello, i32 0, i32 %x
- %hello_l = call i64 @wcslen(i32* %hello_p)
+ %hello_p = getelementptr inbounds [7 x i32], ptr @null_hello, i32 0, i32 %x
+ %hello_l = call i64 @wcslen(ptr %hello_p)
ret i64 %hello_l
}
; CHECK-LABEL: @test_no_simplify3(
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], 15
; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[AND]] to i64
-; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [13 x i32], [13 x i32]* @null_hello_mid, i64 0, i64 [[TMP1]]
-; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(i32* nonnull [[HELLO_P]])
+; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [13 x i32], ptr @null_hello_mid, i64 0, i64 [[TMP1]]
+; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(ptr nonnull [[HELLO_P]])
; CHECK-NEXT: ret i64 [[HELLO_L]]
;
%and = and i32 %x, 15
- %hello_p = getelementptr inbounds [13 x i32], [13 x i32]* @null_hello_mid, i32 0, i32 %and
- %hello_l = call i64 @wcslen(i32* %hello_p)
+ %hello_p = getelementptr inbounds [13 x i32], ptr @null_hello_mid, i32 0, i32 %and
+ %hello_l = call i64 @wcslen(ptr %hello_p)
ret i64 %hello_l
}
; CHECK-LABEL: @test_no_simplify3_no_null_opt(
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], 15
; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[AND]] to i64
-; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [13 x i32], [13 x i32]* @null_hello_mid, i64 0, i64 [[TMP1]]
-; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(i32* [[HELLO_P]])
+; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [13 x i32], ptr @null_hello_mid, i64 0, i64 [[TMP1]]
+; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(ptr [[HELLO_P]])
; CHECK-NEXT: ret i64 [[HELLO_L]]
;
%and = and i32 %x, 15
- %hello_p = getelementptr inbounds [13 x i32], [13 x i32]* @null_hello_mid, i32 0, i32 %and
- %hello_l = call i64 @wcslen(i32* %hello_p)
+ %hello_p = getelementptr inbounds [13 x i32], ptr @null_hello_mid, i32 0, i32 %and
+ %hello_l = call i64 @wcslen(ptr %hello_p)
ret i64 %hello_l
}
; CHECK-LABEL: @test_simplify12(
; CHECK-NEXT: ret i64 0
;
- %l = call i64 @wcslen(i32* bitcast ([1 x i16]* @str16 to i32*))
+ %l = call i64 @wcslen(ptr @str16)
ret i64 %l
}
!llvm.module.flags = !{!0}
!0 = !{i32 1, !"wchar_size", i32 2}
-declare i64 @wcslen(i16*)
+declare i64 @wcslen(ptr)
@hello = constant [6 x i16] [i16 104, i16 101, i16 108, i16 108, i16 111, i16 0]
@longer = constant [7 x i16] [i16 108, i16 111, i16 110, i16 103, i16 101, i16 114, i16 0]
; CHECK-LABEL: @test_simplify1(
; CHECK-NEXT: ret i64 5
;
- %hello_p = getelementptr [6 x i16], [6 x i16]* @hello, i64 0, i64 0
- %hello_l = call i64 @wcslen(i16* %hello_p)
+ %hello_l = call i64 @wcslen(ptr @hello)
ret i64 %hello_l
}
; CHECK-LABEL: @test_simplify2(
; CHECK-NEXT: ret i64 0
;
- %null_p = getelementptr [1 x i16], [1 x i16]* @null, i64 0, i64 0
- %null_l = call i64 @wcslen(i16* %null_p)
+ %null_l = call i64 @wcslen(ptr @null)
ret i64 %null_l
}
; CHECK-LABEL: @test_simplify3(
; CHECK-NEXT: ret i64 0
;
- %null_hello_p = getelementptr [7 x i16], [7 x i16]* @null_hello, i64 0, i64 0
- %null_hello_l = call i64 @wcslen(i16* %null_hello_p)
+ %null_hello_l = call i64 @wcslen(ptr @null_hello)
ret i64 %null_hello_l
}
; CHECK-LABEL: @test_simplify4(
; CHECK-NEXT: ret i64 0
;
- %len = tail call i64 @wcslen(i16* @nullstring) nounwind
+ %len = tail call i64 @wcslen(ptr @nullstring) nounwind
ret i64 %len
}
; CHECK-LABEL: @test_simplify5(
; CHECK-NEXT: ret i1 false
;
- %hello_p = getelementptr [6 x i16], [6 x i16]* @hello, i64 0, i64 0
- %hello_l = call i64 @wcslen(i16* %hello_p)
+ %hello_l = call i64 @wcslen(ptr @hello)
%eq_hello = icmp eq i64 %hello_l, 0
ret i1 %eq_hello
}
-define i1 @test_simplify6(i16* %str_p) {
+define i1 @test_simplify6(ptr %str_p) {
; CHECK-LABEL: @test_simplify6(
-; CHECK-NEXT: [[CHAR0:%.*]] = load i16, i16* [[STR_P:%.*]], align 2
+; CHECK-NEXT: [[CHAR0:%.*]] = load i16, ptr [[STR_P:%.*]], align 2
; CHECK-NEXT: [[EQ_NULL:%.*]] = icmp eq i16 [[CHAR0]], 0
; CHECK-NEXT: ret i1 [[EQ_NULL]]
;
- %str_l = call i64 @wcslen(i16* %str_p)
+ %str_l = call i64 @wcslen(ptr %str_p)
%eq_null = icmp eq i64 %str_l, 0
ret i1 %eq_null
}
; CHECK-LABEL: @test_simplify7(
; CHECK-NEXT: ret i1 true
;
- %hello_p = getelementptr [6 x i16], [6 x i16]* @hello, i64 0, i64 0
- %hello_l = call i64 @wcslen(i16* %hello_p)
+ %hello_l = call i64 @wcslen(ptr @hello)
%ne_hello = icmp ne i64 %hello_l, 0
ret i1 %ne_hello
}
-define i1 @test_simplify8(i16* %str_p) {
+define i1 @test_simplify8(ptr %str_p) {
; CHECK-LABEL: @test_simplify8(
-; CHECK-NEXT: [[CHAR0:%.*]] = load i16, i16* [[STR_P:%.*]], align 2
+; CHECK-NEXT: [[CHAR0:%.*]] = load i16, ptr [[STR_P:%.*]], align 2
; CHECK-NEXT: [[NE_NULL:%.*]] = icmp ne i16 [[CHAR0]], 0
; CHECK-NEXT: ret i1 [[NE_NULL]]
;
- %str_l = call i64 @wcslen(i16* %str_p)
+ %str_l = call i64 @wcslen(ptr %str_p)
%ne_null = icmp ne i64 %str_l, 0
ret i1 %ne_null
}
; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[X:%.*]], i64 5, i64 6
; CHECK-NEXT: ret i64 [[TMP1]]
;
- %hello = getelementptr [6 x i16], [6 x i16]* @hello, i64 0, i64 0
- %longer = getelementptr [7 x i16], [7 x i16]* @longer, i64 0, i64 0
- %s = select i1 %x, i16* %hello, i16* %longer
- %l = call i64 @wcslen(i16* %s)
+ %s = select i1 %x, ptr @hello, ptr @longer
+ %l = call i64 @wcslen(ptr %s)
ret i64 %l
}
; CHECK-NEXT: [[TMP2:%.*]] = sub nsw i64 5, [[TMP1]]
; CHECK-NEXT: ret i64 [[TMP2]]
;
- %hello_p = getelementptr inbounds [6 x i16], [6 x i16]* @hello, i16 0, i16 %x
- %hello_l = call i64 @wcslen(i16* %hello_p)
+ %hello_p = getelementptr inbounds [6 x i16], ptr @hello, i16 0, i16 %x
+ %hello_l = call i64 @wcslen(ptr %hello_p)
ret i64 %hello_l
}
; CHECK-NEXT: ret i64 [[TMP1]]
;
%and = and i16 %x, 7
- %hello_p = getelementptr inbounds [13 x i16], [13 x i16]* @null_hello_mid, i16 0, i16 %and
- %hello_l = call i64 @wcslen(i16* %hello_p)
+ %hello_p = getelementptr inbounds [13 x i16], ptr @null_hello_mid, i16 0, i16 %and
+ %hello_l = call i64 @wcslen(ptr %hello_p)
ret i64 %hello_l
}
define i64 @test_no_simplify1() {
; CHECK-LABEL: @test_no_simplify1(
-; CHECK-NEXT: [[A_L:%.*]] = call i64 @wcslen(i16* nonnull getelementptr inbounds ([32 x i16], [32 x i16]* @a, i64 0, i64 0))
+; CHECK-NEXT: [[A_L:%.*]] = call i64 @wcslen(ptr nonnull @a)
; CHECK-NEXT: ret i64 [[A_L]]
;
- %a_p = getelementptr [32 x i16], [32 x i16]* @a, i64 0, i64 0
- %a_l = call i64 @wcslen(i16* %a_p)
+ %a_l = call i64 @wcslen(ptr @a)
ret i64 %a_l
}
define i64 @test_no_simplify2(i16 %x) {
; CHECK-LABEL: @test_no_simplify2(
; CHECK-NEXT: [[TMP1:%.*]] = sext i16 [[X:%.*]] to i64
-; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [7 x i16], [7 x i16]* @null_hello, i64 0, i64 [[TMP1]]
-; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(i16* nonnull [[HELLO_P]])
+; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [7 x i16], ptr @null_hello, i64 0, i64 [[TMP1]]
+; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(ptr nonnull [[HELLO_P]])
; CHECK-NEXT: ret i64 [[HELLO_L]]
;
- %hello_p = getelementptr inbounds [7 x i16], [7 x i16]* @null_hello, i16 0, i16 %x
- %hello_l = call i64 @wcslen(i16* %hello_p)
+ %hello_p = getelementptr inbounds [7 x i16], ptr @null_hello, i16 0, i16 %x
+ %hello_l = call i64 @wcslen(ptr %hello_p)
ret i64 %hello_l
}
; CHECK-LABEL: @test_no_simplify3(
; CHECK-NEXT: [[AND:%.*]] = and i16 [[X:%.*]], 15
; CHECK-NEXT: [[TMP1:%.*]] = zext i16 [[AND]] to i64
-; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [13 x i16], [13 x i16]* @null_hello_mid, i64 0, i64 [[TMP1]]
-; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(i16* nonnull [[HELLO_P]])
+; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [13 x i16], ptr @null_hello_mid, i64 0, i64 [[TMP1]]
+; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(ptr nonnull [[HELLO_P]])
; CHECK-NEXT: ret i64 [[HELLO_L]]
;
%and = and i16 %x, 15
- %hello_p = getelementptr inbounds [13 x i16], [13 x i16]* @null_hello_mid, i16 0, i16 %and
- %hello_l = call i64 @wcslen(i16* %hello_p)
+ %hello_p = getelementptr inbounds [13 x i16], ptr @null_hello_mid, i16 0, i16 %and
+ %hello_l = call i64 @wcslen(ptr %hello_p)
ret i64 %hello_l
}
; CHECK-LABEL: @test_no_simplify4(
; CHECK-NEXT: ret i64 0
;
- %l = call i64 @wcslen(i16* bitcast ([1 x i32]* @str32 to i16*))
+ %l = call i64 @wcslen(ptr @str32)
ret i64 %l
}
@hello = constant [6 x i32] [i32 104, i32 101, i32 108, i32 108, i32 111, i32 0]
-declare i64 @wcslen(i32*)
+declare i64 @wcslen(ptr)
define i64 @test_no_simplify1() {
; CHECK-LABEL: @test_no_simplify1(
-; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(i32* nonnull getelementptr inbounds ([6 x i32], [6 x i32]* @hello, i64 0, i64 0))
+; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(ptr nonnull @hello)
; CHECK-NEXT: ret i64 [[HELLO_L]]
;
- %hello_p = getelementptr [6 x i32], [6 x i32]* @hello, i64 0, i64 0
- %hello_l = call i64 @wcslen(i32* %hello_p)
+ %hello_l = call i64 @wcslen(ptr @hello)
ret i64 %hello_l
}
;
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
-declare i64 @wcslen(i32*)
+declare i64 @wcslen(ptr)
!0 = !{i32 1, !"wchar_size", i32 4}
!llvm.module.flags = !{!0}
define dso_local i64 @fold_wcslen_s3_pi_s5(i1 zeroext %0, i64 %1) {
; CHECK-LABEL: @fold_wcslen_s3_pi_s5(
-; CHECK-NEXT: [[PS3_PI:%.*]] = getelementptr inbounds [4 x i32], [4 x i32]* @ws3, i64 0, i64 [[TMP1:%.*]]
-; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP0:%.*]], i32* [[PS3_PI]], i32* getelementptr inbounds ([6 x i32], [6 x i32]* @ws5, i64 0, i64 0)
-; CHECK-NEXT: [[LEN:%.*]] = tail call i64 @wcslen(i32* nonnull [[SEL]])
+; CHECK-NEXT: [[PS3_PI:%.*]] = getelementptr inbounds [4 x i32], ptr @ws3, i64 0, i64 [[TMP1:%.*]]
+; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP0:%.*]], ptr [[PS3_PI]], ptr @ws5
+; CHECK-NEXT: [[LEN:%.*]] = tail call i64 @wcslen(ptr nonnull [[SEL]])
; CHECK-NEXT: ret i64 [[LEN]]
;
- %ps3_pi = getelementptr inbounds [4 x i32], [4 x i32]* @ws3, i64 0, i64 %1
- %ps5 = getelementptr inbounds [6 x i32], [6 x i32]* @ws5, i64 0, i64 0
- %sel = select i1 %0, i32* %ps3_pi, i32* %ps5
- %len = tail call i64 @wcslen(i32* %sel)
+ %ps3_pi = getelementptr inbounds [4 x i32], ptr @ws3, i64 0, i64 %1
+ %sel = select i1 %0, ptr %ps3_pi, ptr @ws5
+ %len = tail call i64 @wcslen(ptr %sel)
ret i64 %len
}
; XFAIL-CHECK-NEXT: [[SEL:%.*]] = select i1 %0, i64 [[DIF_I]], i64 5
; XFAIL-CHECK-NEXT: ret i64 [[SEL]]
; CHECK-LABEL: @fold_wcslen_s3_pi_p1_s5(
-; CHECK-NEXT: [[PS3_PI:%.*]] = getelementptr inbounds [4 x i32], [4 x i32]* @ws3, i64 0, i64 [[TMP1:%.*]]
-; CHECK-NEXT: [[PS3_PI_P1:%.*]] = getelementptr inbounds i32, i32* [[PS3_PI]], i64 1
-; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP0:%.*]], i32* [[PS3_PI_P1]], i32* getelementptr inbounds ([6 x i32], [6 x i32]* @ws5, i64 0, i64 0)
-; CHECK-NEXT: [[LEN:%.*]] = tail call i64 @wcslen(i32* nonnull [[SEL]])
+; CHECK-NEXT: [[PS3_PI:%.*]] = getelementptr inbounds [4 x i32], ptr @ws3, i64 0, i64 [[TMP1:%.*]]
+; CHECK-NEXT: [[PS3_PI_P1:%.*]] = getelementptr inbounds i32, ptr [[PS3_PI]], i64 1
+; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP0:%.*]], ptr [[PS3_PI_P1]], ptr @ws5
+; CHECK-NEXT: [[LEN:%.*]] = tail call i64 @wcslen(ptr nonnull [[SEL]])
; CHECK-NEXT: ret i64 [[LEN]]
;
- %ps3_pi = getelementptr inbounds [4 x i32], [4 x i32]* @ws3, i64 0, i64 %1
- %ps3_pi_p1 = getelementptr inbounds i32, i32* %ps3_pi, i64 1
- %ps5 = getelementptr inbounds [6 x i32], [6 x i32]* @ws5, i64 0, i64 0
- %sel = select i1 %0, i32* %ps3_pi_p1, i32* %ps5
- %len = tail call i64 @wcslen(i32* %sel)
+ %ps3_pi = getelementptr inbounds [4 x i32], ptr @ws3, i64 0, i64 %1
+ %ps3_pi_p1 = getelementptr inbounds i32, ptr %ps3_pi, i64 1
+ %sel = select i1 %0, ptr %ps3_pi_p1, ptr @ws5
+ %len = tail call i64 @wcslen(ptr %sel)
ret i64 %len
}
define dso_local i64 @call_wcslen_s5_3_pi_s5(i1 zeroext %0, i64 %1) {
; CHECK-LABEL: @call_wcslen_s5_3_pi_s5(
-; CHECK-NEXT: [[PS5_3_PI:%.*]] = getelementptr inbounds [10 x i32], [10 x i32]* @ws5_3, i64 0, i64 [[TMP1:%.*]]
-; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP0:%.*]], i32* [[PS5_3_PI]], i32* getelementptr inbounds ([6 x i32], [6 x i32]* @ws5, i64 0, i64 0)
-; CHECK-NEXT: [[LEN:%.*]] = tail call i64 @wcslen(i32* nonnull [[SEL]])
+; CHECK-NEXT: [[PS5_3_PI:%.*]] = getelementptr inbounds [10 x i32], ptr @ws5_3, i64 0, i64 [[TMP1:%.*]]
+; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP0:%.*]], ptr [[PS5_3_PI]], ptr @ws5
+; CHECK-NEXT: [[LEN:%.*]] = tail call i64 @wcslen(ptr nonnull [[SEL]])
; CHECK-NEXT: ret i64 [[LEN]]
;
- %ps5_3_pi = getelementptr inbounds [10 x i32], [10 x i32]* @ws5_3, i64 0, i64 %1
- %ps5 = getelementptr inbounds [6 x i32], [6 x i32]* @ws5, i64 0, i64 0
- %sel = select i1 %0, i32* %ps5_3_pi, i32* %ps5
- %len = tail call i64 @wcslen(i32* %sel)
+ %ps5_3_pi = getelementptr inbounds [10 x i32], ptr @ws5_3, i64 0, i64 %1
+ %sel = select i1 %0, ptr %ps5_3_pi, ptr @ws5
+ %len = tail call i64 @wcslen(ptr %sel)
ret i64 %len
}
define dso_local i64 @call_wcslen_s5_3_s5_pj(i1 zeroext %0, i64 %1) {
; CHECK-LABEL: @call_wcslen_s5_3_s5_pj(
-; CHECK-NEXT: [[PS5:%.*]] = getelementptr inbounds [6 x i32], [6 x i32]* @ws5, i64 0, i64 [[TMP1:%.*]]
-; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP0:%.*]], i32* getelementptr inbounds ([10 x i32], [10 x i32]* @ws5_3, i64 0, i64 0), i32* [[PS5]]
-; CHECK-NEXT: [[LEN:%.*]] = tail call i64 @wcslen(i32* nonnull [[SEL]])
+; CHECK-NEXT: [[PS5:%.*]] = getelementptr inbounds [6 x i32], ptr @ws5, i64 0, i64 [[TMP1:%.*]]
+; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP0:%.*]], ptr @ws5_3, ptr [[PS5]]
+; CHECK-NEXT: [[LEN:%.*]] = tail call i64 @wcslen(ptr nonnull [[SEL]])
; CHECK-NEXT: ret i64 [[LEN]]
;
- %ps5_3_pi = getelementptr inbounds [10 x i32], [10 x i32]* @ws5_3, i64 0, i64 0
- %ps5 = getelementptr inbounds [6 x i32], [6 x i32]* @ws5, i64 0, i64 %1
- %sel = select i1 %0, i32* %ps5_3_pi, i32* %ps5
- %len = tail call i64 @wcslen(i32* %sel)
+ %ps5 = getelementptr inbounds [6 x i32], ptr @ws5, i64 0, i64 %1
+ %sel = select i1 %0, ptr @ws5_3, ptr %ps5
+ %len = tail call i64 @wcslen(ptr %sel)
ret i64 %len
}
define dso_local i64 @fold_wcslen_s3_s5_pj(i1 zeroext %0, i64 %1) {
; CHECK-LABEL: @fold_wcslen_s3_s5_pj(
-; CHECK-NEXT: [[PS5_PJ:%.*]] = getelementptr inbounds [6 x i32], [6 x i32]* @ws5, i64 0, i64 [[TMP1:%.*]]
-; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP0:%.*]], i32* getelementptr inbounds ([4 x i32], [4 x i32]* @ws3, i64 0, i64 0), i32* [[PS5_PJ]]
-; CHECK-NEXT: [[LEN:%.*]] = tail call i64 @wcslen(i32* nonnull [[SEL]])
+; CHECK-NEXT: [[PS5_PJ:%.*]] = getelementptr inbounds [6 x i32], ptr @ws5, i64 0, i64 [[TMP1:%.*]]
+; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP0:%.*]], ptr @ws3, ptr [[PS5_PJ]]
+; CHECK-NEXT: [[LEN:%.*]] = tail call i64 @wcslen(ptr nonnull [[SEL]])
; CHECK-NEXT: ret i64 [[LEN]]
;
- %ps3 = getelementptr inbounds [4 x i32], [4 x i32]* @ws3, i64 0, i64 0
- %ps5_pj = getelementptr inbounds [6 x i32], [6 x i32]* @ws5, i64 0, i64 %1
- %sel = select i1 %0, i32* %ps3, i32* %ps5_pj
- %len = tail call i64 @wcslen(i32* %sel)
+ %ps5_pj = getelementptr inbounds [6 x i32], ptr @ws5, i64 0, i64 %1
+ %sel = select i1 %0, ptr @ws3, ptr %ps5_pj
+ %len = tail call i64 @wcslen(ptr %sel)
ret i64 %len
}
define dso_local i64 @call_wcslen_s3_s5_3_pj(i1 zeroext %0, i64 %1) {
; CHECK-LABEL: @call_wcslen_s3_s5_3_pj(
-; CHECK-NEXT: [[PS5_3_PJ:%.*]] = getelementptr inbounds [10 x i32], [10 x i32]* @ws5_3, i64 0, i64 [[TMP1:%.*]]
-; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP0:%.*]], i32* getelementptr inbounds ([4 x i32], [4 x i32]* @ws3, i64 0, i64 0), i32* [[PS5_3_PJ]]
-; CHECK-NEXT: [[LEN:%.*]] = tail call i64 @wcslen(i32* nonnull [[SEL]])
+; CHECK-NEXT: [[PS5_3_PJ:%.*]] = getelementptr inbounds [10 x i32], ptr @ws5_3, i64 0, i64 [[TMP1:%.*]]
+; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP0:%.*]], ptr @ws3, ptr [[PS5_3_PJ]]
+; CHECK-NEXT: [[LEN:%.*]] = tail call i64 @wcslen(ptr nonnull [[SEL]])
; CHECK-NEXT: ret i64 [[LEN]]
;
- %ps3 = getelementptr inbounds [4 x i32], [4 x i32]* @ws3, i64 0, i64 0
- %ps5_3_pj = getelementptr inbounds [10 x i32], [10 x i32]* @ws5_3, i64 0, i64 %1
- %sel = select i1 %0, i32* %ps3, i32* %ps5_3_pj
- %len = tail call i64 @wcslen(i32* %sel)
+ %ps5_3_pj = getelementptr inbounds [10 x i32], ptr @ws5_3, i64 0, i64 %1
+ %sel = select i1 %0, ptr @ws3, ptr %ps5_3_pj
+ %len = tail call i64 @wcslen(ptr %sel)
ret i64 %len
}
define dso_local i64 @fold_wcslen_s3_pi_s5_pj(i1 zeroext %0, i64 %1, i64 %2) {
; CHECK-LABEL: @fold_wcslen_s3_pi_s5_pj(
-; CHECK-NEXT: [[PS3_PI:%.*]] = getelementptr inbounds [4 x i32], [4 x i32]* @ws3, i64 0, i64 [[TMP1:%.*]]
-; CHECK-NEXT: [[PS5_PJ:%.*]] = getelementptr inbounds [6 x i32], [6 x i32]* @ws5, i64 0, i64 [[TMP2:%.*]]
-; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP0:%.*]], i32* [[PS3_PI]], i32* [[PS5_PJ]]
-; CHECK-NEXT: [[LEN:%.*]] = tail call i64 @wcslen(i32* nonnull [[SEL]])
+; CHECK-NEXT: [[PS3_PI:%.*]] = getelementptr inbounds [4 x i32], ptr @ws3, i64 0, i64 [[TMP1:%.*]]
+; CHECK-NEXT: [[PS5_PJ:%.*]] = getelementptr inbounds [6 x i32], ptr @ws5, i64 0, i64 [[TMP2:%.*]]
+; CHECK-NEXT: [[SEL:%.*]] = select i1 [[TMP0:%.*]], ptr [[PS3_PI]], ptr [[PS5_PJ]]
+; CHECK-NEXT: [[LEN:%.*]] = tail call i64 @wcslen(ptr nonnull [[SEL]])
; CHECK-NEXT: ret i64 [[LEN]]
;
- %ps3_pi = getelementptr inbounds [4 x i32], [4 x i32]* @ws3, i64 0, i64 %1
- %ps5_pj = getelementptr inbounds [6 x i32], [6 x i32]* @ws5, i64 0, i64 %2
- %sel = select i1 %0, i32* %ps3_pi, i32* %ps5_pj
- %len = tail call i64 @wcslen(i32* %sel)
+ %ps3_pi = getelementptr inbounds [4 x i32], ptr @ws3, i64 0, i64 %1
+ %ps5_pj = getelementptr inbounds [6 x i32], ptr @ws5, i64 0, i64 %2
+ %sel = select i1 %0, ptr %ps3_pi, ptr %ps5_pj
+ %len = tail call i64 @wcslen(ptr %sel)
ret i64 %len
}