brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 0fc3a7a Raw
67 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4; Verify that the special case of memchr calls with the size of 1 are5; folded as expected.6 7declare ptr @memchr(ptr, i32, i64)8 9@ax = external global [0 x i8]10@a12345 = constant [5 x i8] c"\01\02\03\04\05"11 12 13; Fold memchr(a12345, 1, 1) to a12345.14 15define ptr @fold_memchr_a12345_1_1() {16; CHECK-LABEL: @fold_memchr_a12345_1_1(17; CHECK-NEXT:    ret ptr @a1234518;19 20  %res = call ptr @memchr(ptr @a12345, i32 1, i64 1)21  ret ptr %res22}23 24 25; Fold memchr(a12345, 2, 1) to null.26 27define ptr @fold_memchr_a12345_2_1() {28; CHECK-LABEL: @fold_memchr_a12345_2_1(29; CHECK-NEXT:    ret ptr null30;31 32  %res = call ptr @memchr(ptr @a12345, i32 2, i64 1)33  ret ptr %res34}35 36 37; Fold memchr(ax, 257, 1) to (unsigned char)*ax == 1 ? ax : null38; to verify the constant 257 is converted to unsigned char (yielding 1).39 40define ptr @fold_memchr_ax_257_1(i32 %chr, i64 %n) {41; CHECK-LABEL: @fold_memchr_ax_257_1(42; CHECK-NEXT:    [[MEMCHR_CHAR0:%.*]] = load i8, ptr @ax, align 143; CHECK-NEXT:    [[MEMCHR_CHAR0CMP:%.*]] = icmp eq i8 [[MEMCHR_CHAR0]], 144; CHECK-NEXT:    [[MEMCHR_SEL:%.*]] = select i1 [[MEMCHR_CHAR0CMP]], ptr @ax, ptr null45; CHECK-NEXT:    ret ptr [[MEMCHR_SEL]]46;47 48  %res = call ptr @memchr(ptr @ax, i32 257, i64 1)49  ret ptr %res50}51 52 53; Fold memchr(ax, c, 1) to (unsigned char)*ax == (unsigned char)c ? ax : null.54 55define ptr @fold_memchr_ax_c_1(i32 %chr, i64 %n) {56; CHECK-LABEL: @fold_memchr_ax_c_1(57; CHECK-NEXT:    [[MEMCHR_CHAR0:%.*]] = load i8, ptr @ax, align 158; CHECK-NEXT:    [[TMP1:%.*]] = trunc i32 [[CHR:%.*]] to i859; CHECK-NEXT:    [[MEMCHR_CHAR0CMP:%.*]] = icmp eq i8 [[MEMCHR_CHAR0]], [[TMP1]]60; CHECK-NEXT:    [[MEMCHR_SEL:%.*]] = select i1 [[MEMCHR_CHAR0CMP]], ptr @ax, ptr null61; CHECK-NEXT:    ret ptr [[MEMCHR_SEL]]62;63 64  %res = call ptr @memchr(ptr @ax, i32 %chr, i64 1)65  ret ptr %res66}67