From: Reed Kotler Date: Sun, 10 Nov 2013 00:09:26 +0000 (+0000) Subject: Mostly finish up constant islands port for Mips for load constants. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=50d3b27f431a213a53a0240849a8ce65dc46c8a5;p=oota-llvm.git Mostly finish up constant islands port for Mips for load constants. Still need to finish the branch part. Still lots more review of the code, clean up and testing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194337 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/Mips/MipsConstantIslandPass.cpp b/lib/Target/Mips/MipsConstantIslandPass.cpp index 83ef7f7b6b2..23c988e7154 100644 --- a/lib/Target/Mips/MipsConstantIslandPass.cpp +++ b/lib/Target/Mips/MipsConstantIslandPass.cpp @@ -66,6 +66,16 @@ static cl::opt ConstantIslandsSmallOffset( cl::desc("Make small offsets be this amount for testing purposes"), cl::Hidden); +// +// For testing purposes we tell it to not use relaxed load forms so that it +// will split blocks. +// +static cl::opt NoLoadRelaxation( + "mips-constant-islands-no-load-relaxation", + cl::init(false), + cl::desc("Don't relax loads to long loads - for testing purposes"), + cl::Hidden); + namespace { @@ -169,6 +179,9 @@ namespace { ConstantIslandsSmallOffset: MaxDisp; return xMaxDisp; } + void setMaxDisp(unsigned val) { + MaxDisp = val; + } unsigned getLongFormMaxDisp() const { return LongFormMaxDisp; } @@ -615,6 +628,8 @@ initializeFunctionInfo(const std::vector &CPEMIs) { Bits = 8; Scale = 4; LongFormOpcode = Mips::LwRxPcTcpX16; + LongFormBits = 16; + LongFormScale = 1; break; case Mips::LwRxPcTcpX16: Bits = 16; @@ -977,6 +992,7 @@ int MipsConstantIslands::findLongFormInRangeCPEntry true)) { DEBUG(dbgs() << "In range\n"); UserMI->setDesc(TII->get(U.getLongFormOpcode())); + U.setMaxDisp(U.getLongFormMaxDisp()); return 2; // instruction is longer length now } @@ -1214,9 +1230,10 @@ bool MipsConstantIslands::handleConstantPoolUser(unsigned CPUserIndex) { // No water found. // we first see if a longer form of the instrucion could have reached // the constant. in that case we won't bother to split -#ifdef IN_PROGRESS - result = findLongFormInRangeCPEntry(U, UserOffset); -#endif + if (!NoLoadRelaxation) { + result = findLongFormInRangeCPEntry(U, UserOffset); + if (result != 0) return true; + } DEBUG(dbgs() << "No water found\n"); createNewWater(CPUserIndex, UserOffset, NewMBB); diff --git a/test/CodeGen/Mips/const4.ll b/test/CodeGen/Mips/const4.ll deleted file mode 100644 index 04da7318590..00000000000 --- a/test/CodeGen/Mips/const4.ll +++ /dev/null @@ -1,64 +0,0 @@ -; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -soft-float -mips16-hard-float -relocation-model=static -mips16-constant-islands -mips-constant-islands-small-offset=20 < %s | FileCheck %s -check-prefix=offset20 - -; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -soft-float -mips16-hard-float -relocation-model=static -mips16-constant-islands -mips-constant-islands-small-offset=40 < %s | FileCheck %s -check-prefix=offset40 - - -@i = common global i32 0, align 4 -@b = common global i32 0, align 4 - -; Function Attrs: nounwind -define void @t() #0 { -entry: - store i32 -559023410, i32* @i, align 4 - %0 = load i32* @b, align 4 - %tobool = icmp ne i32 %0, 0 - br i1 %tobool, label %if.then, label %if.else -; offset20: lw ${{[0-9]+}}, $CPI0_1 # 16 bit inst -; offset20: b $BB0_2 -; offset20: .align 2 -; offset20: $CPI0_0: -; offset20: .4byte 3735943886 -; offset20: $BB0_2: - -; offset40: beqz ${{[0-9]+}}, $BB0_3 -; offset40: jal foo -; offset40: nop -; offset40: b $BB0_4 -; offset40: .align 2 -; offset40: $CPI0_0: -; offset40: .4byte 3735943886 -; offset40: $BB0_3: -; offset40: jal goo - -if.then: ; preds = %entry - call void bitcast (void (...)* @foo to void ()*)() - br label %if.end - -if.else: ; preds = %entry - call void bitcast (void (...)* @goo to void ()*)() - br label %if.end - -if.end: ; preds = %if.else, %if.then - call void bitcast (void (...)* @hoo to void ()*)() - call void bitcast (void (...)* @hoo to void ()*)() - call void bitcast (void (...)* @hoo to void ()*)() - call void bitcast (void (...)* @hoo to void ()*)() - call void bitcast (void (...)* @hoo to void ()*)() - call void bitcast (void (...)* @hoo to void ()*)() - call void bitcast (void (...)* @hoo to void ()*)() - call void bitcast (void (...)* @hoo to void ()*)() - ret void -} - -declare void @foo(...) #1 - -declare void @goo(...) #1 - -declare void @hoo(...) #1 - -attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="true" } -attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="true" } - -!llvm.ident = !{!0} - -!0 = metadata !{metadata !"clang version 3.4 (gitosis@dmz-portal.mips.com:clang.git 3a50d847e098f36e3bf8bc14eea07a6cc35f7803) (gitosis@dmz-portal.mips.com:llvm.git f52db0b69f0c888bdc98bb2f13aaecc1e83288a9)"} diff --git a/test/CodeGen/Mips/const4a.ll b/test/CodeGen/Mips/const4a.ll new file mode 100644 index 00000000000..0332327cec6 --- /dev/null +++ b/test/CodeGen/Mips/const4a.ll @@ -0,0 +1,180 @@ +; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -soft-float -mips16-hard-float -relocation-model=pic -mips16-constant-islands -mips-constant-islands-no-load-relaxation < %s | FileCheck %s -check-prefix=no-load-relax + +; ModuleID = 'const4.c' +target datalayout = "E-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-n32-S64" +target triple = "mips--linux-gnu" + +@i = common global i32 0, align 4 +@b = common global i32 0, align 4 +@j = common global i32 0, align 4 +@k = common global i32 0, align 4 +@l = common global i32 0, align 4 + +; Function Attrs: nounwind +define void @t() #0 { +entry: + store i32 -559023410, i32* @i, align 4 + %0 = load i32* @b, align 4 +; no-load-relax lw ${{[0-9]+}}, $CPI0_1 # 16 bit inst + %tobool = icmp ne i32 %0, 0 + br i1 %tobool, label %if.then, label %if.else +; no-load-relax: beqz ${{[0-9]+}}, $BB0_3 +; no-load-relax: lw ${{[0-9]+}}, %call16(foo)(${{[0-9]+}}) +; no-load-relax: b $BB0_4 +; no-load-relax: .align 2 +; no-load-relax: $CPI0_0: +; no-load-relax: .4byte 3735943886 +; no-load-relax: $BB0_3: +; no-load-relax: lw ${{[0-9]+}}, %call16(goo)(${{[0-9]+}}) +if.then: ; preds = %entry + call void bitcast (void (...)* @foo to void ()*)() + br label %if.end + +if.else: ; preds = %entry + call void bitcast (void (...)* @goo to void ()*)() + br label %if.end + +if.end: ; preds = %if.else, %if.then + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + ret void +} + +declare void @foo(...) #1 + +declare void @goo(...) #1 + +declare void @hoo(...) #1 + +attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="true" } +attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="true" } + +!llvm.ident = !{!0} + +!0 = metadata !{metadata !"clang version 3.4 (gitosis@dmz-portal.mips.com:clang.git b310439121c875937d78cc49cc969bc1197fc025) (gitosis@dmz-portal.mips.com:llvm.git 7fc0ca9656ebec8dad61f72f5a5ddfb232c070fd)"} diff --git a/test/CodeGen/Mips/const6.ll b/test/CodeGen/Mips/const6.ll new file mode 100644 index 00000000000..20cdc09f7be --- /dev/null +++ b/test/CodeGen/Mips/const6.ll @@ -0,0 +1,164 @@ +; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -soft-float -mips16-hard-float -relocation-model=pic -mips16-constant-islands < %s | FileCheck %s -check-prefix=load-relax + +; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -soft-float -mips16-hard-float -relocation-model=pic -mips16-constant-islands -mips-constant-islands-no-load-relaxation < %s | FileCheck %s -check-prefix=no-load-relax + +; ModuleID = 'const6.c' +target datalayout = "E-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-n32-S64" +target triple = "mips--linux-gnu" + +@i = common global i32 0, align 4 +@j = common global i32 0, align 4 +@k = common global i32 0, align 4 +@l = common global i32 0, align 4 +@b = common global i32 0, align 4 + +; Function Attrs: nounwind +define void @t() #0 { +entry: + store i32 -559023410, i32* @i, align 4 +; load-relax: lw ${{[0-9]+}}, $CPI0_0 +; load-relax: jrc $ra +; load-relax: .align 2 +; load-relax: $CPI0_0: +; load-relax: .4byte 3735943886 +; load-relax: .end t + +; no-load-relax: lw ${{[0-9]+}}, $CPI0_1 # 16 bit inst +; no-load-relax: jalrc ${{[0-9]+}} +; no-load-relax: b $BB0_2 +; no-load-relax: .align 2 +; no-load-relax: $CPI0_0: +; no-load-relax: .4byte 3735943886 +; no-load-relax: $BB0_2: + + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + call void bitcast (void (...)* @hoo to void ()*)() + ret void +} + +declare void @hoo(...) #1 + +attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="true" } +attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="true" } + +!llvm.ident = !{!0} + +!0 = metadata !{metadata !"clang version 3.4 (gitosis@dmz-portal.mips.com:clang.git b310439121c875937d78cc49cc969bc1197fc025) (gitosis@dmz-portal.mips.com:llvm.git 7fc0ca9656ebec8dad61f72f5a5ddfb232c070fd)"} + +