llvm-project
ce6dd8b0 - [flang][acc] Add ACCUseDeviceCanonicalizer pass (#175228)

Commit
102 days ago
[flang][acc] Add ACCUseDeviceCanonicalizer pass (#175228) This pass canonicalizes the use_device clause on acc.host_data constructs to enable simpler runtime lowering. For use_device operands that are box types or references to boxes, the pass: 1. Extracts the host base address for mapping to a device address using acc.use_device 2. Creates a new boxed descriptor with the device address as the base address for use inside the host_data region The pass also removes unused use_device clauses to reduce runtime calls. This canonicalization hoists load/box_addr patterns out of the host_data region so they are applied to the host variable before acc.use_device, ensuring the device pointer is used directly inside the region. Example transformation for a reference to a box (!fir.ref<!fir.box<>>): Before: ``` %ptr = acc.use_device varPtr(%ref : !fir.ref<!fir.box<!fir.ptr<i32>>>) acc.host_data dataOperands(%ptr) { %box = fir.load %ptr %addr = fir.box_addr %box // use %addr } ``` After: ``` %box = fir.load %ref %addr = fir.box_addr %box %dev_ptr = acc.use_device varPtr(%addr : !fir.ptr<i32>) acc.host_data dataOperands(%dev_ptr) { %new_box = fir.embox %dev_ptr // use device pointer through new descriptor } ``` --------- Co-authored-by: nvptm <pmathew@nvidia.com>
Parents
Loading