; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -S -mergeicmps < %s | FileCheck %s target triple = "x86_64-unknown-linux-gnu" @c = external global i32, align 4 define i1 @d() { ; CHECK-LABEL: @d( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[G:%.*]] = alloca [8 x i64], align 16 ; CHECK-NEXT: [[IDX1:%.*]] = getelementptr inbounds [8 x i64], [8 x i64]* [[G]], i64 0, i64 0 ; CHECK-NEXT: [[V1:%.*]] = load i64, i64* [[IDX1]], align 8 ; CHECK-NEXT: [[IDX2:%.*]] = getelementptr inbounds [8 x i64], [8 x i64]* [[G]], i64 0, i64 0 ; CHECK-NEXT: [[V2:%.*]] = load i64, i64* [[IDX2]], align 8 ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[V1]], [[V2]] ; CHECK-NEXT: br label [[SPLIT:%.*]] ; CHECK: split: ; CHECK-NEXT: [[X:%.*]] = load volatile i32, i32* @c, align 4 ; CHECK-NEXT: br i1 [[CMP]], label [[IF:%.*]], label [[EXIT:%.*]] ; CHECK: if: ; CHECK-NEXT: [[TOBOOL:%.*]] = icmp ne i32 [[X]], 0 ; CHECK-NEXT: br label [[EXIT]] ; CHECK: exit: ; CHECK-NEXT: [[P:%.*]] = phi i1 [ false, [[SPLIT]] ], [ [[TOBOOL]], [[IF]] ] ; CHECK-NEXT: ret i1 [[P]] ; entry: %g = alloca [8 x i64], align 16 %idx1 = getelementptr inbounds [8 x i64], [8 x i64]* %g, i64 0, i64 0 %v1 = load i64, i64* %idx1, align 8 %idx2 = getelementptr inbounds [8 x i64], [8 x i64]* %g, i64 0, i64 0 %v2 = load i64, i64* %idx2, align 8 %cmp = icmp eq i64 %v1, %v2 br label %split split: %x = load volatile i32, i32* @c, align 4 br i1 %cmp, label %if, label %exit if: %tobool = icmp ne i32 %x, 0 br label %exit exit: %p = phi i1 [ false, %split ], [ %tobool, %if ] ret i1 %p }