Skip to content

Commit

Permalink
[GlobalOpt] Fix the assert for null check of global value
Browse files Browse the repository at this point in the history
This is to fix the reported assert - https://bugs.llvm.org/show_bug.cgi?id=51608.

Reviewed By: asbirlea

Differential Revision: https://reviews.llvm.org/D108674
  • Loading branch information
scui-ibm committed Aug 25, 2021
1 parent 2b2c13e commit cea5ab0
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 2 deletions.
5 changes: 3 additions & 2 deletions llvm/lib/Transforms/IPO/GlobalOpt.cpp
Expand Up @@ -703,8 +703,9 @@ static bool AllUsesOfValueWillTrapIfNull(const Value *V,
!ICmpInst::isSigned(cast<ICmpInst>(U)->getPredicate()) &&
isa<LoadInst>(U->getOperand(0)) &&
isa<ConstantPointerNull>(U->getOperand(1))) {
assert(isa<GlobalValue>(
cast<LoadInst>(U->getOperand(0))->getPointerOperand()) &&
assert(isa<GlobalValue>(cast<LoadInst>(U->getOperand(0))
->getPointerOperand()
->stripPointerCasts()) &&
"Should be GlobalVariable");
// This and only this kind of non-signed ICmpInst is to be replaced with
// the comparing of the value of the created global init bool later in
Expand Down
32 changes: 32 additions & 0 deletions llvm/test/Transforms/GlobalOpt/null-check-global-value.ll
@@ -0,0 +1,32 @@
; RUN: opt -globalopt -S < %s | FileCheck %s

%sometype = type { i8* }

@map = internal unnamed_addr global %sometype* null, align 8

define void @Init() {
; CHECK-LABEL: @Init(
; CHECK-NEXT: entry:
; CHECK-NEXT: store i1 true, i1* @map.init, align 1
; CHECK-NEXT: ret void
;
entry:
%call = tail call noalias nonnull dereferenceable(48) i8* @_Znwm(i64 48)
store i8* %call, i8** bitcast (%sometype** @map to i8**), align 8
ret void
}

define void @Usage() {
; CHECK-LABEL: @Usage(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[MAP_INIT_VAL:%.*]] = load i1, i1* @map.init, align 1
; CHECK-NEXT: [[NOTINIT:%.*]] = xor i1 [[MAP_INIT_VAL]], true
; CHECK-NEXT: unreachable
;
entry:
%0 = load i8*, i8** bitcast (%sometype** @map to i8**), align 8
%.not = icmp eq i8* %0, null
unreachable
}

declare i8* @_Znwm(i64)

0 comments on commit cea5ab0

Please sign in to comment.