<div dir="ltr">Hi Michael,<div>I reverted this in r363718 due to some stage2 failures. Some examples can be seen on buildbots here:</div><div><br><a href="http://lab.llvm.org:8011/builders/clang-x64-windows-msvc/builds/132/steps/stage%202%20build/logs/stdio">http://lab.llvm.org:8011/builders/clang-x64-windows-msvc/builds/132/steps/stage%202%20build/logs/stdio</a><br><a href="http://lab.llvm.org:8011/builders/ppc64le-lld-multistage-test/builds/87/steps/build-stage2-unified-tree/logs/stdio">http://lab.llvm.org:8011/builders/ppc64le-lld-multistage-test/builds/87/steps/build-stage2-unified-tree/logs/stdio</a><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jun 18, 2019 at 10:55 AM Michael Liao via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: hliao<br>
Date: Tue Jun 18 10:58:49 2019<br>
New Revision: 363711<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=363711&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=363711&view=rev</a><br>
Log:<br>
[SROA] Enhance SROA to handle `addrspacecast`ed allocas<br>
<br>
Summary:<br>
- After `addrspacecast` is allowed to be eliminated in SROA, the<br>
  adjusting of storage pointer (from `alloca) needs to handle the<br>
  potential different address spaces between the storage pointer (from<br>
  alloca) and the pointer being used.<br>
<br>
Reviewers: arsenm<br>
<br>
Subscribers: wdng, hiraditya, llvm-commits<br>
<br>
Tags: #llvm<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D63501" rel="noreferrer" target="_blank">https://reviews.llvm.org/D63501</a><br>
<br>
Modified:<br>
    llvm/trunk/lib/Transforms/Scalar/SROA.cpp<br>
    llvm/trunk/test/Transforms/SROA/addrspacecast.ll<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/SROA.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SROA.cpp?rev=363711&r1=363710&r2=363711&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SROA.cpp?rev=363711&r1=363710&r2=363711&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/SROA.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/SROA.cpp Tue Jun 18 10:58:49 2019<br>
@@ -1589,6 +1589,12 @@ static Value *getAdjustedPtr(IRBuilderTy<br>
   PointerType *TargetPtrTy = cast<PointerType>(PointerTy);<br>
   Type *TargetTy = TargetPtrTy->getElementType();<br>
<br>
+  // As `addrspacecast` is , `Ptr` (the storage pointer) may have different<br>
+  // address space from the expected `PointerTy` (the pointer to be used).<br>
+  // Adjust the pointer type based the original storage pointer.<br>
+  auto AS = cast<PointerType>(Ptr->getType())->getAddressSpace();<br>
+  PointerTy = PointerTy->getPointerTo(AS);<br>
+<br>
   do {<br>
     // First fold any existing GEPs into the offset.<br>
     while (GEPOperator *GEP = dyn_cast<GEPOperator>(Ptr)) {<br>
<br>
Modified: llvm/trunk/test/Transforms/SROA/addrspacecast.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SROA/addrspacecast.ll?rev=363711&r1=363710&r2=363711&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SROA/addrspacecast.ll?rev=363711&r1=363710&r2=363711&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Transforms/SROA/addrspacecast.ll (original)<br>
+++ llvm/trunk/test/Transforms/SROA/addrspacecast.ll Tue Jun 18 10:58:49 2019<br>
@@ -299,6 +299,21 @@ define void @select_addrspacecast_gv(i1<br>
   ret void<br>
 }<br>
<br>
+; CHECK-LABEL: @select_addrspacecast_i8(<br>
+; CHECK: [[SEL:%.*]] = select i1 undef, i8 undef, i8 undef<br>
+; CHECK-NEXT: ret i8 [[SEL]]<br>
+define i8 @select_addrspacecast_i8() {<br>
+  %a = alloca i8<br>
+  %b = alloca i8<br>
+<br>
+  %a.ptr = addrspacecast i8* %a to i8 addrspace(1)*<br>
+  %b.ptr = addrspacecast i8* %b to i8 addrspace(1)*<br>
+<br>
+  %ptr = select i1 undef, i8 addrspace(1)* %a.ptr, i8 addrspace(1)* %b.ptr<br>
+  %ret = load i8, i8 addrspace(1)* %ptr<br>
+  ret i8 %ret<br>
+}<br>
+<br>
 !0 = !{!1, !1, i64 0, i64 1}<br>
 !1 = !{!2, i64 1, !"type_0"}<br>
 !2 = !{!"root"}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>