Files
llvm-project/clang/test/CIR/CodeGen/ptrdiff.cpp
Henrich Lauko 04dd71cb0b [CIR] Align inline-kind FuncOp attribute with incubator (#170050)
Switches to more efficient explicit enum property instead of a wrapped
storage, simplifying the string representation. The attribute is now
placed before the symbol name for consistency with other FuncOp
attributes. FileCheck patterns are also simplified to match only the
attributes under test.
2025-12-02 09:53:50 +01:00

33 lines
1.5 KiB
C++

// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o %t.cir
// RUN: FileCheck --input-file=%t.cir %s --check-prefix=CIR
// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o %t-cir.ll
// RUN: FileCheck --input-file=%t-cir.ll %s --check-prefix=LLVM
// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o %t.ll
// RUN: FileCheck --input-file=%t.ll %s --check-prefix=OGCG
typedef unsigned long size_type;
size_type size(unsigned long *_start, unsigned long *_finish) {
// CIR-LABEL: cir.func {{.*}} @_Z4sizePmS_
// CIR: %[[D:.*]] = cir.ptr_diff {{.*}} : !cir.ptr<!u64i> -> !s64i
// CIR: %[[U:.*]] = cir.cast integral %[[D]] : !s64i -> !u64i
// CIR: cir.return {{.*}} : !u64i
// LLVM-LABEL: define dso_local {{.*}}i64 @_Z4sizePmS_(
// LLVM: %[[IA:.*]] = ptrtoint ptr %{{.*}} to i64
// LLVM: %[[IB:.*]] = ptrtoint ptr %{{.*}} to i64
// LLVM: %[[SUB:.*]] = sub i64 %[[IA]], %[[IB]]
// LLVM: %[[Q:.*]] = sdiv exact i64 %[[SUB]], 8
// LLVM: store i64 %[[Q]], ptr %[[RETADDR:.*]], align
// LLVM: %[[RET:.*]] = load i64, ptr %[[RETADDR]], align
// LLVM: ret i64 %[[RET]]
// OGCG-LABEL: define dso_local {{.*}}i64 @_Z4sizePmS_(
// OGCG: %[[IA:.*]] = ptrtoint ptr %{{.*}} to i64
// OGCG: %[[IB:.*]] = ptrtoint ptr %{{.*}} to i64
// OGCG: %[[SUB:.*]] = sub i64 %[[IA]], %[[IB]]
// OGCG: %[[Q:.*]] = sdiv exact i64 %[[SUB]], 8
// OGCG: ret i64 %[[Q]]
return static_cast<size_type>(_finish - _start);
}