| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[mlir][ptr] Add ptr.ptr_diff operation (#157354) Thi patch introduces the ptr.ptr_diff operation for computing pointer differences. The semantics of the operation are given by: `` The ptr_diff operation computes the difference between two pointers, returning an integer or index value representing the number of bytes between them. The operation supports both scalar and shaped types with value semantics: - When both operands are scalar: produces a single difference value - When both are shaped: performs element-wise subtraction, shapes must be the same The operation also supports the following flags: - none: No flags are set. - nuw: No Unsigned Wrap, if the subtraction causes an unsigned overflow, the result is a poison value. - nsw: No Signed Wrap, if the subtraction causes a signed overflow, the result is a poison value. NOTE: The pointer difference is calculated using an integer type specified by the data layout. The final result will be sign-extended or truncated to fit the result type as necessary. ` This patch also adds translation to LLVM IR hooks for the ptr_diff op. This translation uses the ptrtoaddr builder to compute only index bits difference. Example: mlir llvm.func @ptr_diff_vector_i32(%ptrs1: vector<8x!ptr.ptr<#llvm.address_space<0>>>, %ptrs2: vector<8x!ptr.ptr<#llvm.address_space<0>>>) -> vector<8xi32> { %diffs = ptr.ptr_diff %ptrs1, %ptrs2 : vector<8x!ptr.ptr<#llvm.address_space<0>>> -> vector<8xi32> llvm.return %diffs : vector<8xi32> } Translation to LLVM IR: llvm define <8 x i32> @ptr_diff_vector_i32(<8 x ptr> %0, <8 x ptr> %1) { %3 = ptrtoint <8 x ptr> %0 to <8 x i64> %4 = ptrtoint <8 x ptr> %1 to <8 x i64> %5 = sub <8 x i64> %3, %4 %6 = trunc <8 x i64> %5 to <8 x i32> ret <8 x i32> %6 } ` --------- Co-authored-by: Mehdi Amini <joker.eph@gmail.com> | 10 个月前 | |
[mlir][Ptr] Init the Ptr dialect with the !ptr.ptr type. (#86860) This patch initializes the ptr dialect directories and base files, adding the !ptr.ptr type and the #ptr.spec<...> data layout spec attribute. The !ptr.ptr type is an opaque pointer type optionally parameterized by a memory space. This type typically represents a handle to an object in memory or target-dependent values like nullptr. The implementation of the DataLayoutTypeInterface interface for !ptr.ptr was adapted from !llvm.ptr's implementation. This implementation uses the #ptr.spec<...> attribute for defining the data layout specification. See [[RFC] ptr dialect & modularizing ptr ops in the LLVM dialect](https://discourse.llvm.org/t/rfc-ptr-dialect-modularizing-ptr-ops-in-the-llvm-dialect/75142) for rationale and roadmap. | 2 年前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 10 个月前 | ||
| 2 年前 |