Skip to content

Commit

Permalink
[SimplifyCFG] teach simplifycfg not to introduce ptrtoint for NI poin…
Browse files Browse the repository at this point in the history
…ters

SimplifyCFG expects to be able to cast both sides to an int, if either side can be case to an int, but this is not desirable or legal, in general, per D104547.

Spotted in JuliaLang/julia#45702

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D128670
  • Loading branch information
vtjnash authored and thilinarmtb committed Aug 23, 2022
1 parent d2301c3 commit 52bd24c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
3 changes: 2 additions & 1 deletion llvm/lib/Transforms/Utils/SimplifyCFG.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,8 @@ static bool dominatesMergePoint(Value *V, BasicBlock *BB,
static ConstantInt *GetConstantInt(Value *V, const DataLayout &DL) {
// Normal constant int.
ConstantInt *CI = dyn_cast<ConstantInt>(V);
if (CI || !isa<Constant>(V) || !V->getType()->isPointerTy())
if (CI || !isa<Constant>(V) || !V->getType()->isPointerTy() ||
DL.isNonIntegralPointerType(V->getType()))
return CI;

// This is some kind of pointer constant. Turn it into a pointer-sized
Expand Down
28 changes: 28 additions & 0 deletions llvm/test/Transforms/SimplifyCFG/nonintegral.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
; RUN: opt -passes=simplifycfg -S < %s | FileCheck %s

target datalayout = "ni:1"

define void @test_01(i64 addrspace(1)* align 8 %ptr) {
; CHECK-LABEL: @test_01(
; CHECK-NOT: ptrtoint
; CHECK-NEXT: icmp eq i64 addrspace(1)* %ptr, null
; CHECK-NOT: ptrtoint
%cond1 = icmp eq i64 addrspace(1)* %ptr, null
%cond2 = icmp eq i64 addrspace(1)* %ptr, null
br i1 %cond1, label %true1, label %false1

true1:
br i1 %cond2, label %true2, label %false2

false1:
store i64 1, i64 addrspace(1)* %ptr, align 8
br label %true1

true2:
store i64 2, i64 addrspace(1)* %ptr, align 8
ret void

false2:
store i64 3, i64 addrspace(1)* %ptr, align 8
ret void
}

0 comments on commit 52bd24c

Please sign in to comment.