; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -passes=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 { ; CHECK-LABEL: @_Z2p1v( ; CHECK-NEXT: [[TMP1:%.*]] = tail call noalias i8* @_Znam(i64 48) #[[ATTR3:[0-9]+]] ; CHECK-NEXT: br i1 false, label [[TMP3:%.*]], label [[TMP2:%.*]] ; CHECK: 2: ; CHECK-NEXT: call void @_ZdaPv(i8* [[TMP1]]) #[[ATTR4:[0-9]+]] ; CHECK-NEXT: br label [[TMP3]] ; CHECK: 3: ; CHECK-NEXT: ret void ; %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 ;