brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 2dd137f Raw
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