[PATCH] D128128: [GlobalOpt] Perform store->dominated load forwarding for stored once globals

Ting Wang via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 23 00:36:40 PDT 2022


tingwang added a comment.

  target datalayout = "e-m:e-i64:64-p:64:64-n32:64-S128-v256:256:256-v512:512:512"
  target triple = "powerpc64le-unknown-linux-gnu"
  
  @j = internal unnamed_addr global i32 0, align 4
  
  ; Function Attrs: nobuiltin nofree noinline nosync
  define dso_local signext i32 @recursive_sub(i32* noalias nocapture dereferenceable(4) %.i) local_unnamed_addr #4 {
  recursive_sub_entry:
    %_val_i_ = load i32, i32* %.i, align 4
    %_add_tmp = sub i32 6, %_val_i_
    store i32 %_add_tmp, i32* @j, align 4
    %_add_tmp8 = add nsw i32 %_val_i_, 1
    store i32 %_add_tmp8, i32* %.i, align 4
    %0 = tail call i32 @recursive_sub(i32* nonnull %.i)
    %_val_ptr_ = load i32, i32* @j, align 4
    %_add_tmp11 = add nsw i32 %_val_ptr_, %0
    ret i32 1
  }
  
  attributes #4 = { nobuiltin nofree noinline nosync }

opt -globalopt -S < %s

  ; ModuleID = '<stdin>'
  source_filename = "<stdin>"
  target datalayout = "e-m:e-i64:64-p:64:64-n32:64-S128-v256:256:256-v512:512:512"
  target triple = "powerpc64le-unknown-linux-gnu"
  
  ; Function Attrs: nobuiltin nofree noinline nosync
  define dso_local signext i32 @recursive_sub(i32* noalias nocapture dereferenceable(4) %.i) local_unnamed_addr #0 {
  recursive_sub_entry:
    %_val_i_ = load i32, i32* %.i, align 4
    %_add_tmp = sub i32 6, %_val_i_
    %_add_tmp8 = add nsw i32 %_val_i_, 1
    store i32 %_add_tmp8, i32* %.i, align 4
    %0 = tail call i32 @recursive_sub(i32* nonnull %.i)
    %_add_tmp11 = add nsw i32 %_add_tmp, %0
    ret i32 1
  }
  
  attributes #0 = { nobuiltin nofree noinline nosync }


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D128128



More information about the llvm-commits mailing list