97 lines · plain
1; RUN: opt -S -passes=mergefunc < %s | FileCheck %s2 3; There is a slight different in these two functions, in that the label values4; are switched. They are thus not mergeable. This tests that block addresses5; referring to blocks within each respective compared function are correctly6; ordered.7 8target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"9target triple = "x86_64-unknown-linux-gnu"10 11; Function Attrs: nounwind uwtable12define i32 @_Z1fi(i32 %i) #0 {13; CHECK-LABEL: define i32 @_Z1fi14; CHECK-NEXT: entry:15; CHECK-NEXT: alloca16entry:17 %i.addr = alloca i32, align 418 %ret = alloca i32, align 419 %l = alloca ptr, align 820 store i32 %i, ptr %i.addr, align 421 store i32 0, ptr %ret, align 422; Right here, this is val_0, and later the if might assign val_123 store ptr blockaddress(@_Z1fi, %val_0), ptr %l, align 824 %0 = load i32, ptr %i.addr, align 425 %and = and i32 %0, 25626 %cmp = icmp eq i32 %and, 027 br i1 %cmp, label %if.then, label %if.end28 29if.then:30 store ptr blockaddress(@_Z1fi, %val_1), ptr %l, align 831 br label %if.end32 33if.end:34 %1 = load ptr, ptr %l, align 835 br label %indirectgoto36 37val_0:38 store i32 12, ptr %ret, align 439 br label %end40 41val_1:42 store i32 42, ptr %ret, align 443 br label %end44 45end:46 %2 = load i32, ptr %ret, align 447 ret i32 %248 49indirectgoto:50 %indirect.goto.dest = phi ptr [ %1, %if.end ]51 indirectbr ptr %indirect.goto.dest, [label %val_0, label %val_1]52}53 54; Function Attrs: nounwind uwtable55define i32 @_Z1gi(i32 %i) #0 {56; CHECK-LABEL: define i32 @_Z1gi57; CHECK-NEXT: entry:58; CHECK-NEXT: alloca59entry:60 %i.addr = alloca i32, align 461 %ret = alloca i32, align 462 %l = alloca ptr, align 863 store i32 %i, ptr %i.addr, align 464 store i32 0, ptr %ret, align 465; This time, we store val_1 initially, and later the if might assign val_066 store ptr blockaddress(@_Z1gi, %val_1), ptr %l, align 867 %0 = load i32, ptr %i.addr, align 468 %and = and i32 %0, 25669 %cmp = icmp eq i32 %and, 070 br i1 %cmp, label %if.then, label %if.end71 72if.then:73 store ptr blockaddress(@_Z1gi, %val_0), ptr %l, align 874 br label %if.end75 76if.end:77 %1 = load ptr, ptr %l, align 878 br label %indirectgoto79 80val_0:81 store i32 12, ptr %ret, align 482 br label %end83 84val_1:85 store i32 42, ptr %ret, align 486 br label %end87 88end:89 %2 = load i32, ptr %ret, align 490 ret i32 %291 92indirectgoto:93 %indirect.goto.dest = phi ptr [ %1, %if.end ]94 indirectbr ptr %indirect.goto.dest, [label %val_1, label %val_0]95}96 97