Skip to content

Commit 16defdc

Browse files
committed
Shift then mask
1 parent e9cb52d commit 16defdc

File tree

2 files changed

+17
-16
lines changed

2 files changed

+17
-16
lines changed

mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2301,19 +2301,20 @@ struct AMDGPUMakeDmaBaseLowering
23012301
Value castForGlobalAddr =
23022302
LLVM::PtrToIntOp::create(rewriter, loc, i64, globalPtr);
23032303

2304-
Value mask = createI64Constant(rewriter, loc, (1ull << 57) - 1);
2305-
Value first57BitsOfGlobalAddr =
2306-
LLVM::AndOp::create(rewriter, loc, castForGlobalAddr, mask);
2307-
Value shift = LLVM::LShrOp::create(rewriter, loc, first57BitsOfGlobalAddr,
2304+
Value lowHalf =
2305+
LLVM::TruncOp::create(rewriter, loc, i32, castForGlobalAddr);
2306+
2307+
Value shift = LLVM::LShrOp::create(rewriter, loc, castForGlobalAddr,
23082308
createI64Constant(rewriter, loc, 32));
23092309

2310-
Value lowHalf =
2311-
LLVM::TruncOp::create(rewriter, loc, i32, first57BitsOfGlobalAddr);
23122310
Value highHalf = LLVM::TruncOp::create(rewriter, loc, i32, shift);
23132311

2312+
Value mask = createI32Constant(rewriter, loc, (1ull << 25) - 1);
2313+
Value validHighHalf = LLVM::AndOp::create(rewriter, loc, highHalf, mask);
2314+
23142315
Value typeField = createI32Constant(rewriter, loc, 2 << 30);
23152316
Value highHalfPlusType =
2316-
LLVM::OrOp::create(rewriter, loc, highHalf, typeField);
2317+
LLVM::OrOp::create(rewriter, loc, validHighHalf, typeField);
23172318

23182319
Value c0 = createI32Constant(rewriter, loc, 0);
23192320
Value c1 = createI32Constant(rewriter, loc, 1);

mlir/test/Conversion/AMDGPUToROCDL/gfx1250.mlir

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -185,15 +185,15 @@ func.func @make_dma_base(%idx: index, %mem: memref<8xi32, #gpu_global_addrspace>
185185
// CHECK-DAG: %[[MEM_INT:.+]] = llvm.ptrtoint %[[MEM_BASE_OFFSET]] : !llvm.ptr<1> to i64
186186
// CHECK-DAG: %[[SMEM_INT:.+]] = llvm.ptrtoint %[[SMEM_BASE_OFFSET]] : !llvm.ptr<3> to i32
187187

188-
// CHECK-DAG: %[[MASK:.+]] = llvm.mlir.constant(144115188075855871 : i64) : i64
189-
// CHECK: %[[MEM_INT_LOW_57:.+]] = llvm.and %[[MEM_INT]], %[[MASK]]
190-
// CHECK: %[[C32:.+]] = llvm.mlir.constant(32 : i64) : i64
191-
// CHECK: %[[SHIFT:.+]] = llvm.lshr %[[MEM_INT_LOW_57]], %[[C32]]
192-
// CHECK-DAG: %[[MEM_INT_LOW:.+]] = llvm.trunc %[[MEM_INT_LOW_57]] : i64 to i32
193-
// CHECK-DAG: %[[MEM_INT_HIGH:.+]] = llvm.trunc %[[SHIFT]] : i64 to i32
194-
195-
// CHECK-DAG: %[[TYPE_MASK:.+]] = llvm.mlir.constant(-2147483648 : i32)
196-
// CHECK: %[[MEM_INT_HIGH_TYPE:.+]] = llvm.or %[[MEM_INT_HIGH]], %[[TYPE_MASK]]
188+
// CHECK: %[[MEM_INT_LOW:.+]] = llvm.trunc %[[MEM_INT]] : i64 to i32
189+
// CHECK-DAG: %[[SHIFT:.+]] = llvm.mlir.constant(32 : i64)
190+
// CHECK: %[[SHIFTED_MEM_INT:.+]] = llvm.lshr %[[MEM_INT]], %[[SHIFT]]
191+
// CHECK: %[[MEM_INT_HIGH:.+]] = llvm.trunc %[[SHIFTED_MEM_INT]] : i64 to i32
192+
// CHECK-DAG: %[[MASK:.+]] = llvm.mlir.constant(33554431 : i32)
193+
// CHECK: %[[VALID_MEM_INT_HIGH:.+]] = llvm.and %[[MEM_INT_HIGH]], %[[MASK]]
194+
195+
// CHECK-DAG: %[[TYPE_FIELD:.+]] = llvm.mlir.constant(-2147483648 : i32)
196+
// CHECK: %[[MEM_INT_HIGH_TYPE:.+]] = llvm.or %[[VALID_MEM_INT_HIGH]], %[[TYPE_FIELD]]
197197

198198
// CHECK-DAG: %[[C0:.+]] = llvm.mlir.constant(0 : i32) : i32
199199
// CHECK-DAG: %[[C1:.+]] = llvm.mlir.constant(1 : i32) : i32

0 commit comments

Comments
 (0)