brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · a31646b Raw
92 lines · plain
1; RUN: opt -S -passes=mergefunc < %s | FileCheck %s2 3; These two functions are identical. The basic block labels are the same, and4; induce the same CFG. We are testing that block addresses within different5; functions are compared by their value, and not based on order. Both functions6; come from the same C-code, but in the first the two val_0/val_1 basic blocks7; are in a different order (they were manually switched post-compilation).8 9target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"10target triple = "x86_64-unknown-linux-gnu"11 12define i32 @_Z1fi(i32 %i) #0 {13entry:14  %i.addr = alloca i32, align 415  %ret = alloca i32, align 416  %l = alloca ptr, align 817  store i32 %i, ptr %i.addr, align 418  store i32 0, ptr %ret, align 419  store ptr blockaddress(@_Z1fi, %val_0), ptr %l, align 820  %0 = load i32, ptr %i.addr, align 421  %and = and i32 %0, 25622  %cmp = icmp eq i32 %and, 023  br i1 %cmp, label %if.then, label %if.end24 25if.then:26  store ptr blockaddress(@_Z1fi, %val_1), ptr %l, align 827  br label %if.end28 29if.end:30  %1 = load ptr, ptr %l, align 831  br label %indirectgoto32 33val_1:34  store i32 42, ptr %ret, align 435  br label %end36 37val_0:38  store i32 12, ptr %ret, align 439  br label %end40 41 42end:43  %2 = load i32, ptr %ret, align 444  ret i32 %245 46indirectgoto:47  %indirect.goto.dest = phi ptr [ %1, %if.end ]48  indirectbr ptr %indirect.goto.dest, [label %val_0, label %val_1]49}50 51define i32 @_Z1gi(i32 %i) #0 {52; CHECK-LABEL: define i32 @_Z1gi53; CHECK-NEXT: tail call i32 @_Z1fi54; CHECK-NEXT: ret55entry:56  %i.addr = alloca i32, align 457  %ret = alloca i32, align 458  %l = alloca ptr, align 859  store i32 %i, ptr %i.addr, align 460  store i32 0, ptr %ret, align 461  store ptr blockaddress(@_Z1gi, %val_0), ptr %l, align 862  %0 = load i32, ptr %i.addr, align 463  %and = and i32 %0, 25664  %cmp = icmp eq i32 %and, 065  br i1 %cmp, label %if.then, label %if.end66 67if.then:68  store ptr blockaddress(@_Z1gi, %val_1), ptr %l, align 869  br label %if.end70 71if.end:72  %1 = load ptr, ptr %l, align 873  br label %indirectgoto74 75val_0:76  store i32 12, ptr %ret, align 477  br label %end78 79val_1:80  store i32 42, ptr %ret, align 481  br label %end82 83end:84  %2 = load i32, ptr %ret, align 485  ret i32 %286 87indirectgoto:88  %indirect.goto.dest = phi ptr [ %1, %if.end ]89  indirectbr ptr %indirect.goto.dest, [label %val_0, label %val_1]90}91 92