[llvm] [AMDGPU] Limit promoting allocas that have users with dynamic index above a threshold on number of elements (PR #170327)

Kevin Choi via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 8 08:31:40 PST 2025


choikwa wrote:

> Have you checked whether in the original case, the gep result pointer is aligned to 16 for the <16 x i8> access? If aligned, we can still bitcast the <128 x i8> to <8 x i128> and do insert/extract of i128 without expansion. For the unaligned case, abort promotion maybe a reasonable comprise.

>From the log
```
Scoring:   %11 = alloca [8 x <16 x i8>], align 16, addrspace(5)
  [+5]:   store <16 x i8> %543, ptr addrspace(5) %11, align 16
  [+9]:   store <16 x i8> %390, ptr addrspace(5) %11, align 16
  [+13]:    %426 = load <4 x i32>, ptr addrspace(5) %425, align 16
  [+9]:   %579 = load <4 x i32>, ptr addrspace(5) %578, align 16
  [+5]:   store <16 x i8> %546, ptr addrspace(5) %547, align 16
  [+5]:   store <16 x i8> %550, ptr addrspace(5) %551, align 16
  [+5]:   store <16 x i8> %554, ptr addrspace(5) %555, align 16
  [+5]:   store <16 x i8> %558, ptr addrspace(5) %559, align 16
  [+5]:   store <16 x i8> %562, ptr addrspace(5) %563, align 16
  [+5]:   store <16 x i8> %566, ptr addrspace(5) %567, align 16
  [+5]:   store <16 x i8> %570, ptr addrspace(5) %571, align 16
  [+9]:   store <16 x i8> %393, ptr addrspace(5) %394, align 16
  [+9]:   store <16 x i8> %397, ptr addrspace(5) %398, align 16
  [+9]:   store <16 x i8> %401, ptr addrspace(5) %402, align 16
  [+9]:   store <16 x i8> %405, ptr addrspace(5) %406, align 16
  [+9]:   store <16 x i8> %409, ptr addrspace(5) %410, align 16
  [+9]:   store <16 x i8> %413, ptr addrspace(5) %414, align 16
  [+9]:   store <16 x i8> %417, ptr addrspace(5) %418, align 16
  => Final Score:134
Scoring:   %12 = alloca [8 x <16 x i8>], align 16, addrspace(5)
  [+1]:   store <16 x i8> %476, ptr addrspace(5) %12, align 16
  [+5]:   store <16 x i8> %323, ptr addrspace(5) %12, align 16
  [+13]:    %424 = load <4 x i32>, ptr addrspace(5) %423, align 16
  [+9]:   %577 = load <4 x i32>, ptr addrspace(5) %576, align 16
  [+1]:   store <16 x i8> %483, ptr addrspace(5) %484, align 16
  [+1]:   store <16 x i8> %491, ptr addrspace(5) %492, align 16
  [+1]:   store <16 x i8> %499, ptr addrspace(5) %500, align 16
  [+1]:   store <16 x i8> %507, ptr addrspace(5) %508, align 16
  [+1]:   store <16 x i8> %515, ptr addrspace(5) %516, align 16
  [+1]:   store <16 x i8> %523, ptr addrspace(5) %524, align 16
  [+1]:   store <16 x i8> %531, ptr addrspace(5) %532, align 16
  [+5]:   store <16 x i8> %330, ptr addrspace(5) %331, align 16
  [+5]:   store <16 x i8> %338, ptr addrspace(5) %339, align 16
  [+5]:   store <16 x i8> %346, ptr addrspace(5) %347, align 16
  [+5]:   store <16 x i8> %354, ptr addrspace(5) %355, align 16
  [+5]:   store <16 x i8> %362, ptr addrspace(5) %363, align 16
  [+5]:   store <16 x i8> %370, ptr addrspace(5) %371, align 16
  [+5]:   store <16 x i8> %378, ptr addrspace(5) %379, align 16
  => Final Score:70
...
**Trying to promote to vector:   %11 = alloca [8 x <16 x i8>], align 16, addrspace(5)**
  Attempting promotion to: <128 x i8>
  Converting alloca to vector [8 x <16 x i8>] -> <128 x i8>
  Inserted PHI:   %promotealloca17 = phi <128 x i8> [ %promotealloca16, %711 ], [ %17, %141 ]
  Inserted PHI:   %promotealloca16 = phi <128 x i8> [ %675, %689 ], [ %promotealloca17, %250 ]
  Inserted PHI:   %promotealloca = phi <128 x i8> [ %1085, %1099 ], [ %promotealloca17, %732 ]
  Remaining vectorization budget:3072
...
**Trying to promote to vector:   %11 = alloca [8 x <16 x i8>], align 16, addrspace(5)**
  Attempting promotion to: <128 x i8>
  Converting alloca to vector [8 x <16 x i8>] -> <128 x i8>
  Inserted PHI:   %promotealloca19 = phi <128 x i8> [ %636, %1007 ], [ %16, %141 ]
  Remaining vectorization budget:2048
```

https://github.com/llvm/llvm-project/pull/170327


More information about the llvm-commits mailing list