|
4 | 4 | // RUN: -emit-llvm -fno-clangir-call-conv-lowering -o - %s \ |
5 | 5 | // RUN: | opt -S -passes=instcombine,mem2reg,simplifycfg -o %t.ll |
6 | 6 | // RUN: FileCheck --check-prefix=LLVM --input-file=%t.ll %s |
| 7 | +// XFAIL: * |
7 | 8 |
|
8 | 9 | // This test file is a collection of test cases for all target-independent |
9 | 10 | // builtins that are related to memory operations. |
@@ -76,6 +77,25 @@ extern "C" char* test_memchr(const char arg[32]) { |
76 | 77 | // LLVM: ret ptr [[RET]] |
77 | 78 | } |
78 | 79 |
|
| 80 | +extern "C" wchar_t* test_wmemchr(const wchar_t *wc) { |
| 81 | + return __builtin_wmemchr(wc, 257u, 32); |
| 82 | + |
| 83 | + // CIR-LABEL: test_wmemchr |
| 84 | + // CIR: [[PATTERN:%.*]] = cir.const #cir.int<257> : !u32i |
| 85 | + // CIR: [[LEN:%.*]] = cir.const #cir.int<32> : !s32i |
| 86 | + // CIR: [[LEN_U64:%.*]] = cir.cast(integral, [[LEN]] : !s32i), !u64i |
| 87 | + // CIR: cir.call @wmemchr({{%.*}}, [[PATTERN]], [[LEN_U64]]) : (!cir.ptr<!u32i>, !u32i, !u64i) -> !cir.ptr<!u32i> |
| 88 | + |
| 89 | + // LLVM: {{.*}}@test_wmemchr(ptr{{.*}}[[ARG:%.*]]) |
| 90 | + // LLVM: [[TMP0:%.*]] = alloca ptr, i64 1, align 8 |
| 91 | + // LLVM: store ptr [[ARG]], ptr [[TMP0]], align 8 |
| 92 | + // LLVM: [[SRC:%.*]] = load ptr, ptr [[TMP0]], align 8 |
| 93 | + // LLVM: [[RES:%.*]] = call ptr @wmemchr(ptr [[SRC]], i32 257, i64 32) |
| 94 | + // LLVM: store ptr [[RES]], ptr [[RET_P:%.*]], align 8 |
| 95 | + // LLVM: [[RET:%.*]] = load ptr, ptr [[RET_P]], align 8 |
| 96 | + // LLVM: ret ptr [[RET]] |
| 97 | +} |
| 98 | + |
79 | 99 | extern "C" void *test_return_address(void) { |
80 | 100 | return __builtin_return_address(1); |
81 | 101 |
|
|
0 commit comments