[PATCH] D127202: [InlineFunction] Handle early exit during getUnderlyingObjects due to MaxLookup

ChenZheng via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 23 03:26:40 PDT 2022


shchenz added inline comments.


================
Comment at: llvm/test/Transforms/Coroutines/coro-retcon-resume-values.ll:53
+; CHECK-NEXT:    store i32 2, i32* [[TMP4]], align 4
+; CHECK-NEXT:    [[FRAMEPTR_I1:%.*]] = load %f.Frame*, %f.Frame** [[TMP2]], align 8, !alias.scope !0
 ; CHECK-NEXT:    [[INPUT_RELOAD_ADDR13_I:%.*]] = getelementptr inbounds [[F_FRAME:%.*]], %f.Frame* [[FRAMEPTR_I1]], i64 0, i32 2
----------------
The change here seems like another bug fix.

Before the patch:
```
  %2 = bitcast i8* %0 to %f.Frame**

  %FramePtr.i1 = load %f.Frame*, %f.Frame** %2, align 8, !alias.scope !3

  %input.reload.addr13.i = getelementptr inbounds %f.Frame, %f.Frame* %FramePtr.i1, i64 0, i32 2
  %input.reload14.i = load i32, i32* %input.reload.addr13.i, align 4, !noalias !3
  %n.val3.reload.addr11.i = getelementptr inbounds %f.Frame, %f.Frame* %FramePtr.i1, i64 0, i32 1
  %n.val3.reload12.i = load i32, i32* %n.val3.reload.addr11.i, align 4, !noalias !3

  store i32 %sum7.i, i32* %n.val3.reload.addr11.i, align 4, !noalias !3
  store i32 4, i32* %input.reload.addr13.i, align 4, !noalias !3
```

`%0` is a noalias argument when do inlining. So before the change all the latter loads/stores are not aliased to the noalias argument `%0`, but seems it is not right. The base for the loads/stores are exactly `%0` which is loaded from a pointer of pointer. The pointer of pointer is casted from `%0`.

`getUnderlyingObjects()` can not check underlying object inside loads for now.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D127202/new/

https://reviews.llvm.org/D127202



More information about the llvm-commits mailing list