1*f1ec0d12SNick Anderson; RUN: opt -passes='require<profile-summary>,function(codegenprepare)' -S -mtriple=x86_64 < %s | FileCheck %s 25a56a25bSFangrui Song 3d9e51e75SMatt Arsenault@exit_addr = constant ptr blockaddress(@gep_unmerging, %exit) 4d9e51e75SMatt Arsenault@op1_addr = constant ptr blockaddress(@gep_unmerging, %op1) 5d9e51e75SMatt Arsenault@op2_addr = constant ptr blockaddress(@gep_unmerging, %op2) 6d9e51e75SMatt Arsenault@op3_addr = constant ptr blockaddress(@gep_unmerging, %op3) 75a56a25bSFangrui Song@dummy = global i8 0 85a56a25bSFangrui Song 9d9e51e75SMatt Arsenaultdefine void @gep_unmerging(i1 %pred, ptr %p0) { 105a56a25bSFangrui Songentry: 11d9e51e75SMatt Arsenault %table = alloca [256 x ptr] 12d9e51e75SMatt Arsenault %table_1 = getelementptr [256 x ptr], ptr %table, i64 0, i64 1 13d9e51e75SMatt Arsenault %table_2 = getelementptr [256 x ptr], ptr %table, i64 0, i64 2 14d9e51e75SMatt Arsenault %table_3 = getelementptr [256 x ptr], ptr %table, i64 0, i64 3 15d9e51e75SMatt Arsenault %exit_a = load ptr, ptr @exit_addr 16d9e51e75SMatt Arsenault %op1_a = load ptr, ptr @op1_addr 17d9e51e75SMatt Arsenault %op2_a = load ptr, ptr @op2_addr 18d9e51e75SMatt Arsenault %op3_a = load ptr, ptr @op3_addr 19d9e51e75SMatt Arsenault store ptr %exit_a, ptr %table 20d9e51e75SMatt Arsenault store ptr %op1_a, ptr %table_1 21d9e51e75SMatt Arsenault store ptr %op2_a, ptr %table_2 22d9e51e75SMatt Arsenault store ptr %op3_a, ptr %table_3 235a56a25bSFangrui Song br label %indirectbr 245a56a25bSFangrui Song 255a56a25bSFangrui Songop1: 265a56a25bSFangrui Song; CHECK-LABEL: op1: 27d9e51e75SMatt Arsenault; CHECK-NEXT: %p1_inc2 = getelementptr i8, ptr %p_preinc, i64 3 28d9e51e75SMatt Arsenault; CHECK-NEXT: %p1_inc1 = getelementptr i8, ptr %p_preinc, i64 2 29d9e51e75SMatt Arsenault %p1_inc2 = getelementptr i8, ptr %p_preinc, i64 3 30d9e51e75SMatt Arsenault %p1_inc1 = getelementptr i8, ptr %p_preinc, i64 2 31d9e51e75SMatt Arsenault %a10 = load i8, ptr %p_postinc 32d9e51e75SMatt Arsenault %a11 = load i8, ptr %p1_inc1 335a56a25bSFangrui Song %a12 = add i8 %a10, %a11 34d9e51e75SMatt Arsenault store i8 %a12, ptr @dummy 355a56a25bSFangrui Song br i1 %pred, label %indirectbr, label %exit 365a56a25bSFangrui Song 375a56a25bSFangrui Songop2: 385a56a25bSFangrui Song; CHECK-LABEL: op2: 39d9e51e75SMatt Arsenault; CHECK-NEXT: %p2_inc = getelementptr i8, ptr %p_preinc, i64 2 40d9e51e75SMatt Arsenault %p2_inc = getelementptr i8, ptr %p_preinc, i64 2 41d9e51e75SMatt Arsenault %a2 = load i8, ptr %p_postinc 42d9e51e75SMatt Arsenault store i8 %a2, ptr @dummy 435a56a25bSFangrui Song br i1 %pred, label %indirectbr, label %exit 445a56a25bSFangrui Song 455a56a25bSFangrui Songop3: 465a56a25bSFangrui Song br i1 %pred, label %indirectbr, label %exit 475a56a25bSFangrui Song 485a56a25bSFangrui Songindirectbr: 49d9e51e75SMatt Arsenault %p_preinc = phi ptr [%p0, %entry], [%p1_inc2, %op1], [%p2_inc, %op2], [%p_postinc, %op3] 50d9e51e75SMatt Arsenault %p_postinc = getelementptr i8, ptr %p_preinc, i64 1 51d9e51e75SMatt Arsenault %next_op = load i8, ptr %p_preinc 525a56a25bSFangrui Song %p_zext = zext i8 %next_op to i64 53d9e51e75SMatt Arsenault %slot = getelementptr [256 x ptr], ptr %table, i64 0, i64 %p_zext 54d9e51e75SMatt Arsenault %target = load ptr, ptr %slot 55d9e51e75SMatt Arsenault indirectbr ptr %target, [label %exit, label %op1, label %op2] 565a56a25bSFangrui Song 575a56a25bSFangrui Songexit: 585a56a25bSFangrui Song ret void 595a56a25bSFangrui Song} 60