[llvm] [SeparateConstOffsetFromGEP] Reorder trivial GEP chains to separate constants (PR #73056)

Aaron Liu via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 15 11:38:53 PST 2024


AaronHLiu wrote:

```
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i64, ptr [[TMP0]], i64 [[IN_IDX1]]
              ^
<stdin>:9:67: note: scanning from here
 %0 = getelementptr [8192 x i64], ptr %in.ptr, i64 %in.idx0, i64 0
                                                                  ^
<stdin>:9:67: note: with "TMP0" equal to "%0"
 %0 = getelementptr [8192 x i64], ptr %in.ptr, i64 %in.idx0, i64 0
                                                                  ^
<stdin>:9:67: note: with "IN_IDX1" equal to "%in\\.idx1"
 %0 = getelementptr [8192 x i64], ptr %in.ptr, i64 %in.idx0, i64 0
                                                                  ^
<stdin>:10:6: note: possible intended match here
 %const11 = getelementptr i8, ptr %0, i64 2048
     ^

Input file: <stdin>
Check file: /home/hualilia/llvm/dev/llvm-project/llvm/test/Transforms/SeparateConstOffsetFromGEP/NVPTX/lower-gep-reorder.ll

-dump-input=help explains the following input dump.

Input was:
<<<<<<
           1: ; ModuleID = '<stdin>'
           2: source_filename = "<stdin>"
           3: target datalayout = "e-i64:64-i128:128-v16:16-v32:32-n16:32:64"
           4: target triple = "nvptx64-nvidia-cuda"
           5:
           6: define protected amdgpu_kernel void @sink_addr(ptr %in.ptr, i64 %in.idx0, i64 %in.idx1) {
           7: entry:
           8:  %idx0 = getelementptr [8192 x i64], ptr %in.ptr, i64 %in.idx0, i64 %in.idx1
           9:  %0 = getelementptr [8192 x i64], ptr %in.ptr, i64 %in.idx0, i64 0
next:10'0                                                                       X error: no match found
next:10'1                                                                         with "TMP0" equal to "%0"
next:10'2                                                                         with "IN_IDX1" equal to "%in\\.idx1"
          10:  %const11 = getelementptr i8, ptr %0, i64 2048
next:10'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
next:10'1                                                                         with "TMP0" equal to "%0"
next:10'2                                                                         with "IN_IDX1" equal to "%in\\.idx1"
          10:  %const11 = getelementptr i8, ptr %0, i64 2048
next:10'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
next:10'3          ?                                          possible intended match
          11:  %idx1 = getelementptr i64, ptr %const11, i64 %in.idx1
next:10'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          12:  %1 = getelementptr [8192 x i64], ptr %in.ptr, i64 %in.idx0, i64 0
next:10'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          13:  %const22 = getelementptr i8, ptr %1, i64 4096
next:10'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          14:  %idx2 = getelementptr i64, ptr %const22, i64 %in.idx1
next:10'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          15:  %2 = getelementptr [8192 x i64], ptr %in.ptr, i64 %in.idx0, i64 0
next:10'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           .
```

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


More information about the llvm-commits mailing list