brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · be704be Raw
103 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3;4; Exercise folding of memcmp calls with constant arrays including both5; negative and positive characters and both constant and nonconstant sizes.6 7declare i32 @memcmp(ptr, ptr, i64)8 9@a = constant [7 x i8] c"abcdef\7f"10@b = constant [7 x i8] c"abcdef\80"11 12 13; Exercise memcmp(A + C, B + C, 2) folding of small arrays that differ in14; a character with the opposite sign and a constant size.15 16define void @fold_memcmp_cst_cst(ptr %pcmp) {17; CHECK-LABEL: @fold_memcmp_cst_cst(18; CHECK-NEXT:    store i32 -1, ptr [[PCMP:%.*]], align 419; CHECK-NEXT:    [[SB5_A5:%.*]] = getelementptr i8, ptr [[PCMP]], i64 420; CHECK-NEXT:    store i32 1, ptr [[SB5_A5]], align 421; CHECK-NEXT:    [[SA6_B6:%.*]] = getelementptr i8, ptr [[PCMP]], i64 822; CHECK-NEXT:    store i32 -1, ptr [[SA6_B6]], align 423; CHECK-NEXT:    [[SB6_A6:%.*]] = getelementptr i8, ptr [[PCMP]], i64 1224; CHECK-NEXT:    store i32 1, ptr [[SB6_A6]], align 425; CHECK-NEXT:    ret void26;27  %p5 = getelementptr [7 x i8], ptr @a, i64 0, i64 528  %p6 = getelementptr [7 x i8], ptr @a, i64 0, i64 629 30  %q5 = getelementptr [7 x i8], ptr @b, i64 0, i64 531  %q6 = getelementptr [7 x i8], ptr @b, i64 0, i64 632 33  ; Fold memcmp(a + 5, b + 5, 2) to -1.34  %ca5_b5 = call i32 @memcmp(ptr %p5, ptr %q5, i64 2)35  store i32 %ca5_b5, ptr %pcmp36 37  ; Fold memcmp(b + 5, a + 5, 2) to +1.38  %cb5_a5 = call i32 @memcmp(ptr %q5, ptr %p5, i64 2)39  %sb5_a5 = getelementptr i32, ptr %pcmp, i64 140  store i32 %cb5_a5, ptr %sb5_a541 42  ; Fold memcmp(a + 6, b + 6, 1) to -1.43  %ca6_b6 = call i32 @memcmp(ptr %p6, ptr %q6, i64 1)44  %sa6_b6 = getelementptr i32, ptr %pcmp, i64 245  store i32 %ca6_b6, ptr %sa6_b646 47  ; Fold memcmp(b + 6, a + 6, 1) to  +1.48  %cb6_a6 = call i32 @memcmp(ptr %q6, ptr %p6, i64 1)49  %sb6_a6 = getelementptr i32, ptr %pcmp, i64 350  store i32 %cb6_a6, ptr %sb6_a651 52  ret void53}54 55 56; Exercise memcmp(A, B, N) folding of arrays that differ in a character57; with the opposite sign and a variable size58 59define void @fold_memcmp_cst_var(ptr %pcmp, i64 %n) {60; CHECK-LABEL: @fold_memcmp_cst_var(61; CHECK-NEXT:    [[TMP1:%.*]] = icmp ugt i64 [[N:%.*]], 662; CHECK-NEXT:    [[CA0_B0:%.*]] = sext i1 [[TMP1]] to i3263; CHECK-NEXT:    store i32 [[CA0_B0]], ptr [[PCMP:%.*]], align 464; CHECK-NEXT:    [[TMP2:%.*]] = icmp ugt i64 [[N]], 665; CHECK-NEXT:    [[CB0_A0:%.*]] = zext i1 [[TMP2]] to i3266; CHECK-NEXT:    [[SB0_A0:%.*]] = getelementptr i8, ptr [[PCMP]], i64 467; CHECK-NEXT:    store i32 [[CB0_A0]], ptr [[SB0_A0]], align 468; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i64 [[N]], 069; CHECK-NEXT:    [[CA6_B6:%.*]] = sext i1 [[TMP3]] to i3270; CHECK-NEXT:    [[SA6_B6:%.*]] = getelementptr i8, ptr [[PCMP]], i64 871; CHECK-NEXT:    store i32 [[CA6_B6]], ptr [[SA6_B6]], align 472; CHECK-NEXT:    [[TMP4:%.*]] = icmp ne i64 [[N]], 073; CHECK-NEXT:    [[CB6_A6:%.*]] = zext i1 [[TMP4]] to i3274; CHECK-NEXT:    [[SB6_A6:%.*]] = getelementptr i8, ptr [[PCMP]], i64 1275; CHECK-NEXT:    store i32 [[CB6_A6]], ptr [[SB6_A6]], align 476; CHECK-NEXT:    ret void77;78  %p6 = getelementptr [7 x i8], ptr @a, i64 0, i64 679 80  %q6 = getelementptr [7 x i8], ptr @b, i64 0, i64 681 82  ; Fold memcmp(a, b, n) to -1.83  %ca0_b0 = call i32 @memcmp(ptr @a, ptr @b, i64 %n)84  store i32 %ca0_b0, ptr %pcmp85 86  ; Fold memcmp(b, a, n) to +1.87  %cb0_a0 = call i32 @memcmp(ptr @b, ptr @a, i64 %n)88  %sb0_a0 = getelementptr i32, ptr %pcmp, i64 189  store i32 %cb0_a0, ptr %sb0_a090 91  ; Fold memcmp(a + 6, b + 6, n) to -1.92  %ca6_b6 = call i32 @memcmp(ptr %p6, ptr %q6, i64 %n)93  %sa6_b6 = getelementptr i32, ptr %pcmp, i64 294  store i32 %ca6_b6, ptr %sa6_b695 96  ; Fold memcmp(b + 6, a + 6, n) to +1.97  %cb6_a6 = call i32 @memcmp(ptr %q6, ptr %p6, i64 %n)98  %sb6_a6 = getelementptr i32, ptr %pcmp, i64 399  store i32 %cb6_a6, ptr %sb6_a6100 101  ret void102}103