// RUN: mlir-opt -pass-pipeline='func(canonicalize)' %s | FileCheck %s // CHECK-LABEL: @propagate_constant // CHECK-SAME: %[[arg1:.*]]: memref func @propagate_constant(%arg1: memref) { // The outer constant must be preserved because it still has uses. // CHECK: %[[outer_cst:.*]] = constant 1 %c1 = constant 1 : index // The constant must be dropped from the args list, but the memref should // remain. // CHECK: gpu.launch // CHECK-SAME: args(%[[inner_arg:.*]] = %[[arg1]]) : memref gpu.launch blocks(%bx, %by, %bz) in (%sbx = %c1, %sby = %c1, %sbz = %c1) threads(%tx, %ty, %tz) in (%stx = %c1, %sty = %c1, %stz = %c1) args(%x = %c1, %y = %arg1) : index, memref { // The constant is propagated into the kernel body and used. // CHECK: %[[inner_cst:.*]] = constant 1 // CHECK: "foo"(%[[inner_cst]]) "foo"(%x) : (index) -> () // CHECK: "bar"(%[[inner_arg]]) "bar"(%y) : (memref) -> () gpu.return } return }