; RUN: opt -instsimplify -S < %s | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" @g1 = global i32 0, align 4 @g2 = internal global i32 0, align 4 @g3 = unnamed_addr global i32 0, align 4 @g4 = hidden global i32 0, align 4 @g5 = protected global i32 0, align 4 @g6 = thread_local unnamed_addr global i32 0, align 4 ; Make sure we can simplify away a pointer comparison between ; dynamically-allocated memory and a local stack allocation. ; void p() ; { ; int *mData; ; int mStackData[10]; ; mData = new int[12]; ; if (mData != mStackData) { ; delete[] mData; ; } ; } define void @_Z2p1v() #0 { %mStackData = alloca [10 x i32], align 16 %1 = bitcast [10 x i32]* %mStackData to i8* %2 = tail call noalias i8* @_Znam(i64 48) #4 %3 = bitcast i8* %2 to i32* %4 = getelementptr inbounds [10 x i32], [10 x i32]* %mStackData, i64 0, i64 0 %5 = icmp eq i32* %3, %4 br i1 %5, label %7, label %6 ; CHECK-LABEL: @_Z2p1v ; CHECK-NOT: icmp ; CHECK: ret void ;