changeset 1:ba74047a4d78

add Makefile for arg, bug, conv, normal and fix these .c file
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Wed, 22 Oct 2014 00:38:01 +0900
parents bacef8675607
children 35d6eabeadb0
files Makefile arg.c argForClang.c argForClang.ll bug.c conv.c
diffstat 6 files changed, 118 insertions(+), 484 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Wed Oct 22 00:38:01 2014 +0900
@@ -0,0 +1,14 @@
+CC=/Users/e105711/prog/seminar/CbC/llvmInst/Debug+Asserts/bin/clang
+TARGET=arg bug conv normal
+CFLAGS=-O2 -D"CLANG"
+
+.SUFFIXES: .c .o
+
+.c.o:
+	$(CC) $(CFLAGS) -o $<
+
+all: $(TARGET)
+
+clean:
+	rm -f $(TARGET)
+	rm -f *.o
--- a/arg.c	Tue Oct 14 17:34:59 2014 +0900
+++ b/arg.c	Wed Oct 22 00:38:01 2014 +0900
@@ -1,11 +1,7 @@
 #include "stdio.h"
 
-#define __environment _CbC_environment
-#define __return _CbC_return
-
-
 struct arg {
-   int a0;int a1;int a2;int a3;int a4;
+  int a0;int a1;int a2;int a3;int a4;
 };
 
 extern void exit(int); 
@@ -13,71 +9,79 @@
 void *exit_env;
 __code (*exit___code)();
 
+__code carg1(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(int, void*),void *env);
+__code carg2(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(int, void*),void *env);
+__code cargs(struct arg args0,__code(*exit1)(int, void*),void *env);
+__code carg3(struct arg args0,struct arg args1,int i, int j,int k,int l);
+__code carg4(struct arg args0,struct arg args1,int i, int j,int k,int l);
+__code carg5(struct arg args0,struct arg args1,int i, int j,int k,int l);
+__code carg6(int i, int j,int k,int l,struct arg args0);
+int main1(int n);
+
 __code carg1(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(int, void*),void *env)
 {
-    printf("#0017:arg1: %d %d %d %d %d : %x %x\n",arg0,arg1,arg2,arg3,arg4,exit1==exit___code,env==exit_env);
-    goto carg2(arg1,arg2,arg3,arg4,arg0,exit1,env);
+  printf("#0017:arg1: %d %d %d %d %d : %x %x\n",arg0,arg1,arg2,arg3,arg4,exit1==exit___code,env==exit_env);
+  goto carg2(arg1,arg2,arg3,arg4,arg0,exit1,env);
 }
 
 __code carg2(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(int, void*),void *env)
 {
-    struct arg args0;
-    printf("#0024:arg1: %d %d %d %d %d : %x %x\n",arg0,arg1,arg2,arg3,arg4,exit1==exit___code,env==exit_env );
-    args0.a0 = arg0;
-    args0.a1 = arg1;
-    args0.a2 = arg2;
-    args0.a3 = arg3;
-    args0.a4 = arg4;
-    goto cargs(args0,exit1,env);
+  struct arg args0;
+  printf("#0024:arg1: %d %d %d %d %d : %x %x\n",arg0,arg1,arg2,arg3,arg4,exit1==exit___code,env==exit_env );
+  args0.a0 = arg0;
+  args0.a1 = arg1;
+  args0.a2 = arg2;
+  args0.a3 = arg3;
+  args0.a4 = arg4;
+  goto cargs(args0,exit1,env);
 }
 
 __code cargs(struct arg args0,__code(*exit1)(int, void*),void *env)
 {
-    printf("#0035:args: %d %d %d %d %d : %x %x\n",
-	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,
-    exit1==exit___code,env==exit_env);
-    // goto exit1(321),env;
-    goto (*exit1)(0,env);
+  printf("#0035:args: %d %d %d %d %d : %x %x\n",
+         args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,
+         exit1==exit___code,env==exit_env);
+  goto (*exit1)(0,env);
 }
 
 
 __code carg3(struct arg args0,struct arg args1,int i, int j,int k,int l)
 {
-    printf("#0045:args3: %d %d %d %d %d : %x %x %x %x\n",
-	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
-    printf("#0047:args3: args0 %d %d %d %d %d : args1 %d %d %d %d %d : %x %x %x %x\n",
-	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,
-	args1.a0,args1.a1,args1.a2,args1.a3,args1.a4,
-	i,j,k,l);
-    if (args0.a0==args1.a0) exit(0);
-    goto carg4(args0,args1,j,k,l,i);
+  printf("#0045:args3: %d %d %d %d %d : %x %x %x %x\n",
+         args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
+  printf("#0047:args3: args0 %d %d %d %d %d : args1 %d %d %d %d %d : %x %x %x %x\n",
+         args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,
+         args1.a0,args1.a1,args1.a2,args1.a3,args1.a4,
+         i,j,k,l);
+  if (args0.a0==args1.a0) exit(0);
+  goto carg4(args0,args1,j,k,l,i);
 }
 
 __code carg4(struct arg args0,struct arg args1,int i, int j,int k,int l)
 {
-    printf("#0057:args4: %d %d %d %d %d : %x %x %x %x\n",
-	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
-    goto carg5(args1,args0,j,k,l,i);
+  printf("#0057:args4: %d %d %d %d %d : %x %x %x %x\n",
+         args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
+  goto carg5(args1,args0,j,k,l,i);
 }
 
 __code carg5(struct arg args0,struct arg args1,int i, int j,int k,int l)
 {
-    printf("#0064:args5: %d %d %d %d %d : %x %x %x %x\n",
-	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
-    goto carg6(i,j,k,l,args0);
+  printf("#0064:args5: %d %d %d %d %d : %x %x %x %x\n",
+         args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
+  goto carg6(i,j,k,l,args0);
 }
 
 __code carg6(int i, int j,int k,int l,struct arg args0)
 {
-    printf("#0071:args6: %d %d %d %d %d : %x %x %x %x\n",
-	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
-    goto carg3(args0,args0,i,j,k,l);
+  printf("#0071:args6: %d %d %d %d %d : %x %x %x %x\n",
+         args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
+  goto carg3(args0,args0,i,j,k,l);
 }
 
 int main1(int n)
 {
-    goto carg1(0,1,2,3,4,exit___code=__return,exit_env=__environment);
-    return n;
+  goto carg1(0,1,2,3,4,exit___code=__return,exit_env=__environment);
+  return n;
 }
 
 struct arg a00;
@@ -85,20 +89,20 @@
 
 int main( int ac, char *av[])
 {
-    int n;
-    n = main1(123);
-    printf("#0089:321=%d\n",n);
+  int n;
+  n = main1(123);
+  printf("#0089:321=%d\n",n);
 
-    a00.a0 = 11;
-    a00.a1 = 22;
-    a00.a2 = 33;
-    a00.a3 = 44;
-    a00.a4 = 55;
-    a01.a0 = 66;
-    a01.a1 = 77;
-    a01.a2 = 88;
-    a01.a3 = 99;
-    a01.a4 = 10;
-    goto carg3(a00,a01,1,2,3,4);
+  a00.a0 = 11;
+  a00.a1 = 22;
+  a00.a2 = 33;
+  a00.a3 = 44;
+  a00.a4 = 55;
+  a01.a0 = 66;
+  a01.a1 = 77;
+  a01.a2 = 88;
+  a01.a3 = 99;
+  a01.a4 = 10;
+  goto carg3(a00,a01,1,2,3,4);
 }
 
--- a/argForClang.c	Tue Oct 14 17:34:59 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-#include "stdio.h"
-
-struct arg {
-   int a0;int a1;int a2;int a3;int a4;
-};
-
-extern void exit(int); 
-
-void *exit_env;
-__code (*exit___code)();
-
-__code carg1(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(int, void*),void *env);
-__code carg2(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(int, void*),void *env);
-__code cargs(struct arg args0,__code(*exit1)(int, void*),void *env);
-__code carg3(struct arg args0,struct arg args1,int i, int j,int k,int l);
-__code carg4(struct arg args0,struct arg args1,int i, int j,int k,int l);
-__code carg5(struct arg args0,struct arg args1,int i, int j,int k,int l);
-__code carg6(int i, int j,int k,int l,struct arg args0);
-int main1(int n);
-
-__code carg1(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(int, void*),void *env)
-{
-    printf("#0017:arg1: %d %d %d %d %d : %x %x\n",arg0,arg1,arg2,arg3,arg4,exit1==exit___code,env==exit_env);
-    goto carg2(arg1,arg2,arg3,arg4,arg0,exit1,env);
-}
-
-__code carg2(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(int, void*),void *env)
-{
-    struct arg args0;
-    printf("#0024:arg1: %d %d %d %d %d : %x %x\n",arg0,arg1,arg2,arg3,arg4,exit1==exit___code,env==exit_env );
-    args0.a0 = arg0;
-    args0.a1 = arg1;
-    args0.a2 = arg2;
-    args0.a3 = arg3;
-    args0.a4 = arg4;
-    goto cargs(args0,exit1,env);
-}
-
-__code cargs(struct arg args0,__code(*exit1)(int, void*),void *env)
-{
-    printf("#0035:args: %d %d %d %d %d : %x %x\n",
-	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,
-    exit1==exit___code,env==exit_env);
-    // goto exit1(321),env;
-    goto (*exit1)(0,env);
-}
-
-
-__code carg3(struct arg args0,struct arg args1,int i, int j,int k,int l)
-{
-    printf("#0045:args3: %d %d %d %d %d : %x %x %x %x\n",
-	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
-    printf("#0047:args3: args0 %d %d %d %d %d : args1 %d %d %d %d %d : %x %x %x %x\n",
-	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,
-	args1.a0,args1.a1,args1.a2,args1.a3,args1.a4,
-	i,j,k,l);
-    if (args0.a0==args1.a0) exit(0);
-    goto carg4(args0,args1,j,k,l,i);
-}
-
-__code carg4(struct arg args0,struct arg args1,int i, int j,int k,int l)
-{
-    printf("#0057:args4: %d %d %d %d %d : %x %x %x %x\n",
-	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
-    goto carg5(args1,args0,j,k,l,i);
-}
-
-__code carg5(struct arg args0,struct arg args1,int i, int j,int k,int l)
-{
-    printf("#0064:args5: %d %d %d %d %d : %x %x %x %x\n",
-	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
-    goto carg6(i,j,k,l,args0);
-}
-
-__code carg6(int i, int j,int k,int l,struct arg args0)
-{
-    printf("#0071:args6: %d %d %d %d %d : %x %x %x %x\n",
-	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
-    goto carg3(args0,args0,i,j,k,l);
-}
-
-int main1(int n)
-{
-  goto carg1(0,1,2,3,4,exit___code=__return,exit_env=__environment);
-  return n;
-}
-
-struct arg a00;
-struct arg a01;
-
-int main( int ac, char *av[])
-{
-    int n;
-    n = main1(123);
-    printf("#0089:321=%d\n",n);
-
-    a00.a0 = 11;
-    a00.a1 = 22;
-    a00.a2 = 33;
-    a00.a3 = 44;
-    a00.a4 = 55;
-    a01.a0 = 66;
-    a01.a1 = 77;
-    a01.a2 = 88;
-    a01.a3 = 99;
-    a01.a4 = 10;
-    goto carg3(a00,a01,1,2,3,4);
-}
-
--- a/argForClang.ll	Tue Oct 14 17:34:59 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,281 +0,0 @@
-; ModuleID = 'argForClang.c'
-target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
-target triple = "x86_64-apple-macosx10.9.0"
-
-%struct.arg = type { i32, i32, i32, i32, i32 }
-%struct.__CbC_env = type { i8*, i32* }
-
-@.str = private unnamed_addr constant [36 x i8] c"#0017:arg1: %d %d %d %d %d : %x %x\0A\00", align 1
-@exit___code = common global void (...)* null, align 8
-@exit_env = common global i8* null, align 8
-@.str1 = private unnamed_addr constant [36 x i8] c"#0024:arg1: %d %d %d %d %d : %x %x\0A\00", align 1
-@.str2 = private unnamed_addr constant [36 x i8] c"#0035:args: %d %d %d %d %d : %x %x\0A\00", align 1
-@.str3 = private unnamed_addr constant [43 x i8] c"#0045:args3: %d %d %d %d %d : %x %x %x %x\0A\00", align 1
-@.str4 = private unnamed_addr constant [72 x i8] c"#0047:args3: args0 %d %d %d %d %d : args1 %d %d %d %d %d : %x %x %x %x\0A\00", align 1
-@.str5 = private unnamed_addr constant [43 x i8] c"#0057:args4: %d %d %d %d %d : %x %x %x %x\0A\00", align 1
-@.str6 = private unnamed_addr constant [43 x i8] c"#0064:args5: %d %d %d %d %d : %x %x %x %x\0A\00", align 1
-@.str7 = private unnamed_addr constant [43 x i8] c"#0071:args6: %d %d %d %d %d : %x %x %x %x\0A\00", align 1
-@.str8 = private unnamed_addr constant [14 x i8] c"#0089:321=%d\0A\00", align 1
-@a00 = common global %struct.arg zeroinitializer, align 4
-@a01 = common global %struct.arg zeroinitializer, align 4
-
-; Function Attrs: nounwind ssp uwtable
-define fastcc void @carg1(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, void (i32, i8*)* %exit1, i8* %env) #0 {
-entry:
-  %0 = load void (...)** @exit___code, align 8
-  %1 = bitcast void (...)* %0 to void (i32, i8*)*
-  %cmp = icmp eq void (i32, i8*)* %exit1, %1
-  %conv = zext i1 %cmp to i32
-  %2 = load i8** @exit_env, align 8
-  %cmp1 = icmp eq i8* %env, %2
-  %conv2 = zext i1 %cmp1 to i32
-  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([36 x i8]* @.str, i32 0, i32 0), i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %conv, i32 %conv2)
-  tail call fastcc void @carg2(i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg0, void (i32, i8*)* %exit1, i8* %env)
-  ret void
-}
-
-declare i32 @printf(i8*, ...) #1
-
-; Function Attrs: nounwind ssp uwtable
-define fastcc void @carg2(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, void (i32, i8*)* %exit1, i8* %env) #0 {
-entry:
-  %args0 = alloca %struct.arg, align 8
-  %0 = load void (...)** @exit___code, align 8
-  %1 = bitcast void (...)* %0 to void (i32, i8*)*
-  %cmp = icmp eq void (i32, i8*)* %exit1, %1
-  %conv = zext i1 %cmp to i32
-  %2 = load i8** @exit_env, align 8
-  %cmp1 = icmp eq i8* %env, %2
-  %conv2 = zext i1 %cmp1 to i32
-  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([36 x i8]* @.str1, i32 0, i32 0), i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %conv, i32 %conv2)
-  %a0 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 0
-  store i32 %arg0, i32* %a0, align 4
-  %a1 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 1
-  store i32 %arg1, i32* %a1, align 4
-  %a2 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 2
-  store i32 %arg2, i32* %a2, align 4
-  %a3 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 3
-  store i32 %arg3, i32* %a3, align 4
-  %a4 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 4
-  store i32 %arg4, i32* %a4, align 4
-  call fastcc void @cargs(%struct.arg* byval align 8 %args0, void (i32, i8*)* %exit1, i8* %env)
-  ret void
-}
-
-; Function Attrs: nounwind ssp uwtable
-define fastcc void @cargs(%struct.arg* byval align 8 %args0, void (i32, i8*)* %exit1, i8* %env) #0 {
-entry:
-  %a0 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 0
-  %0 = load i32* %a0, align 4
-  %a1 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 1
-  %1 = load i32* %a1, align 4
-  %a2 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 2
-  %2 = load i32* %a2, align 4
-  %a3 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 3
-  %3 = load i32* %a3, align 4
-  %a4 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 4
-  %4 = load i32* %a4, align 4
-  %5 = load void (...)** @exit___code, align 8
-  %6 = bitcast void (...)* %5 to void (i32, i8*)*
-  %cmp = icmp eq void (i32, i8*)* %exit1, %6
-  %conv = zext i1 %cmp to i32
-  %7 = load i8** @exit_env, align 8
-  %cmp1 = icmp eq i8* %env, %7
-  %conv2 = zext i1 %cmp1 to i32
-  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([36 x i8]* @.str2, i32 0, i32 0), i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %conv, i32 %conv2)
-  tail call fastcc void %exit1(i32 0, i8* %env)
-  ret void
-}
-
-; Function Attrs: nounwind ssp uwtable
-define fastcc void @carg3(%struct.arg* byval align 8 %args0, %struct.arg* byval align 8 %args1, i32 %i, i32 %j, i32 %k, i32 %l) #0 {
-entry:
-  %a0 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 0
-  %0 = load i32* %a0, align 4
-  %a1 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 1
-  %1 = load i32* %a1, align 4
-  %a2 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 2
-  %2 = load i32* %a2, align 4
-  %a3 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 3
-  %3 = load i32* %a3, align 4
-  %a4 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 4
-  %4 = load i32* %a4, align 4
-  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([43 x i8]* @.str3, i32 0, i32 0), i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %i, i32 %j, i32 %k, i32 %l)
-  %5 = load i32* %a0, align 4
-  %6 = load i32* %a1, align 4
-  %7 = load i32* %a2, align 4
-  %8 = load i32* %a3, align 4
-  %9 = load i32* %a4, align 4
-  %a06 = getelementptr inbounds %struct.arg* %args1, i32 0, i32 0
-  %10 = load i32* %a06, align 4
-  %a17 = getelementptr inbounds %struct.arg* %args1, i32 0, i32 1
-  %11 = load i32* %a17, align 4
-  %a28 = getelementptr inbounds %struct.arg* %args1, i32 0, i32 2
-  %12 = load i32* %a28, align 4
-  %a39 = getelementptr inbounds %struct.arg* %args1, i32 0, i32 3
-  %13 = load i32* %a39, align 4
-  %a410 = getelementptr inbounds %struct.arg* %args1, i32 0, i32 4
-  %14 = load i32* %a410, align 4
-  %call11 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([72 x i8]* @.str4, i32 0, i32 0), i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32 %10, i32 %11, i32 %12, i32 %13, i32 %14, i32 %i, i32 %j, i32 %k, i32 %l)
-  %15 = load i32* %a0, align 4
-  %16 = load i32* %a06, align 4
-  %cmp = icmp eq i32 %15, %16
-  br i1 %cmp, label %if.then, label %if.end
-
-if.then:                                          ; preds = %entry
-  call void @exit(i32 0) #5
-  unreachable
-
-if.end:                                           ; preds = %entry
-  tail call fastcc void @carg4(%struct.arg* byval align 8 %args0, %struct.arg* byval align 8 %args1, i32 %j, i32 %k, i32 %l, i32 %i)
-  ret void
-}
-
-; Function Attrs: noreturn
-declare void @exit(i32) #2
-
-; Function Attrs: nounwind ssp uwtable
-define fastcc void @carg4(%struct.arg* byval align 8 %args0, %struct.arg* byval align 8 %args1, i32 %i, i32 %j, i32 %k, i32 %l) #0 {
-entry:
-  %a0 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 0
-  %0 = load i32* %a0, align 4
-  %a1 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 1
-  %1 = load i32* %a1, align 4
-  %a2 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 2
-  %2 = load i32* %a2, align 4
-  %a3 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 3
-  %3 = load i32* %a3, align 4
-  %a4 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 4
-  %4 = load i32* %a4, align 4
-  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([43 x i8]* @.str5, i32 0, i32 0), i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %i, i32 %j, i32 %k, i32 %l)
-  tail call fastcc void @carg5(%struct.arg* byval align 8 %args1, %struct.arg* byval align 8 %args0, i32 %j, i32 %k, i32 %l, i32 %i)
-  ret void
-}
-
-; Function Attrs: nounwind ssp uwtable
-define fastcc void @carg5(%struct.arg* byval align 8 %args0, %struct.arg* byval align 8 %args1, i32 %i, i32 %j, i32 %k, i32 %l) #0 {
-entry:
-  %a0 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 0
-  %0 = load i32* %a0, align 4
-  %a1 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 1
-  %1 = load i32* %a1, align 4
-  %a2 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 2
-  %2 = load i32* %a2, align 4
-  %a3 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 3
-  %3 = load i32* %a3, align 4
-  %a4 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 4
-  %4 = load i32* %a4, align 4
-  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([43 x i8]* @.str6, i32 0, i32 0), i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %i, i32 %j, i32 %k, i32 %l)
-  tail call fastcc void @carg6(i32 %i, i32 %j, i32 %k, i32 %l, %struct.arg* byval align 8 %args0)
-  ret void
-}
-
-; Function Attrs: nounwind ssp uwtable
-define fastcc void @carg6(i32 %i, i32 %j, i32 %k, i32 %l, %struct.arg* byval align 8 %args0) #0 {
-entry:
-  %a0 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 0
-  %0 = load i32* %a0, align 4
-  %a1 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 1
-  %1 = load i32* %a1, align 4
-  %a2 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 2
-  %2 = load i32* %a2, align 4
-  %a3 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 3
-  %3 = load i32* %a3, align 4
-  %a4 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 4
-  %4 = load i32* %a4, align 4
-  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([43 x i8]* @.str7, i32 0, i32 0), i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %i, i32 %j, i32 %k, i32 %l)
-  tail call fastcc void @carg3(%struct.arg* byval align 8 %args0, %struct.arg* byval align 8 %args0, i32 %i, i32 %j, i32 %k, i32 %l)
-  ret void
-}
-
-; Function Attrs: nounwind ssp uwtable
-define fastcc void @main1..ret0(i32 %retval, i8* %env) #0 {
-entry:
-  %0 = bitcast i8* %env to %struct.__CbC_env*
-  %ret_p = getelementptr inbounds %struct.__CbC_env* %0, i32 0, i32 0
-  %1 = load i8** %ret_p, align 8
-  %2 = bitcast i8* %1 to i32*
-  store i32 %retval, i32* %2, align 4
-  %env1 = getelementptr inbounds %struct.__CbC_env* %0, i32 0, i32 1
-  %3 = load i32** %env1, align 8
-  call void @longjmp(i32* %3, i32 1) #5
-  unreachable
-}
-
-; Function Attrs: noreturn
-declare void @longjmp(i32*, i32) #2
-
-; Function Attrs: nounwind ssp uwtable
-define i32 @main1(i32 %n) #0 {
-entry:
-  %__CbC_environment = alloca %struct.__CbC_env, align 8
-  %retval3 = alloca i32, align 4
-  %env_buf = alloca [37 x i32], align 16
-  store void (...)* bitcast (void (i32, i8*)* @main1..ret0 to void (...)*), void (...)** @exit___code, align 8
-  %0 = bitcast i32* %retval3 to i8*
-  %ret_p = getelementptr inbounds %struct.__CbC_env* %__CbC_environment, i32 0, i32 0
-  store i8* %0, i8** %ret_p, align 8
-  %arraydecay = getelementptr inbounds [37 x i32]* %env_buf, i32 0, i32 0
-  %env = getelementptr inbounds %struct.__CbC_env* %__CbC_environment, i32 0, i32 1
-  store i32* %arraydecay, i32** %env, align 8
-  %call = call i32 @setjmp(i32* %arraydecay) #6
-  %tobool = icmp ne i32 %call, 0
-  br i1 %tobool, label %if.then, label %if.end
-
-if.then:                                          ; preds = %entry
-  %1 = load i32* %retval3, align 4
-  br label %return
-
-if.end:                                           ; preds = %entry
-  %2 = bitcast %struct.__CbC_env* %__CbC_environment to i8*
-  store i8* %2, i8** @exit_env, align 8
-  call fastcc void @carg1(i32 0, i32 1, i32 2, i32 3, i32 4, void (i32, i8*)* @main1..ret0, i8* %2)
-  br label %return
-
-return:                                           ; preds = %if.end, %if.then
-  %retval.0 = phi i32 [ %1, %if.then ], [ %n, %if.end ]
-  ret i32 %retval.0
-}
-
-; Function Attrs: returns_twice
-declare i32 @setjmp(i32*) #3
-
-; Function Attrs: nounwind ssp uwtable
-define i32 @main(i32 %ac, i8** %av) #0 {
-entry:
-  %tmp = alloca %struct.arg, align 8
-  %tmp2 = alloca %struct.arg, align 8
-  %call = call i32 @main1(i32 123)
-  %call1 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([14 x i8]* @.str8, i32 0, i32 0), i32 %call)
-  store i32 11, i32* getelementptr inbounds (%struct.arg* @a00, i32 0, i32 0), align 4
-  store i32 22, i32* getelementptr inbounds (%struct.arg* @a00, i32 0, i32 1), align 4
-  store i32 33, i32* getelementptr inbounds (%struct.arg* @a00, i32 0, i32 2), align 4
-  store i32 44, i32* getelementptr inbounds (%struct.arg* @a00, i32 0, i32 3), align 4
-  store i32 55, i32* getelementptr inbounds (%struct.arg* @a00, i32 0, i32 4), align 4
-  store i32 66, i32* getelementptr inbounds (%struct.arg* @a01, i32 0, i32 0), align 4
-  store i32 77, i32* getelementptr inbounds (%struct.arg* @a01, i32 0, i32 1), align 4
-  store i32 88, i32* getelementptr inbounds (%struct.arg* @a01, i32 0, i32 2), align 4
-  store i32 99, i32* getelementptr inbounds (%struct.arg* @a01, i32 0, i32 3), align 4
-  store i32 10, i32* getelementptr inbounds (%struct.arg* @a01, i32 0, i32 4), align 4
-  %0 = bitcast %struct.arg* %tmp to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* bitcast (%struct.arg* @a00 to i8*), i64 20, i32 4, i1 false)
-  %1 = bitcast %struct.arg* %tmp2 to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* bitcast (%struct.arg* @a01 to i8*), i64 20, i32 4, i1 false)
-  call fastcc void @carg3(%struct.arg* byval align 8 %tmp, %struct.arg* byval align 8 %tmp2, i32 1, i32 2, i32 3, i32 4)
-  ret i32 0
-}
-
-; Function Attrs: nounwind
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #4
-
-attributes #0 = { nounwind ssp uwtable "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"="false" }
-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"="false" }
-attributes #2 = { noreturn "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"="false" }
-attributes #3 = { returns_twice "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"="false" }
-attributes #4 = { nounwind }
-attributes #5 = { noreturn }
-attributes #6 = { returns_twice }
-
-!llvm.ident = !{!0}
-
-!0 = metadata !{metadata !"clang version 3.5 (trunk)"}
--- a/bug.c	Tue Oct 14 17:34:59 2014 +0900
+++ b/bug.c	Wed Oct 22 00:38:01 2014 +0900
@@ -1,3 +1,5 @@
+#include<stdio.h>
+
 typedef void (*atexit_callback)(void);
 typedef void (*cxa_atexit_callback)(void *);
 struct one_atexit_routine 
--- a/conv.c	Tue Oct 14 17:34:59 2014 +0900
+++ b/conv.c	Wed Oct 22 00:38:01 2014 +0900
@@ -1,71 +1,75 @@
 #include "stdio.h"
 
-f0(int i) {
-    int k,j;
-    k = 3+i;
-    j = g0(i+3);
-    return k+4+j;
+#ifdef CLANG
+#define _CbC_return __return
+#define _CbC_environment __environment
+#endif
+
+int g0(int i) {
+  return i+4;
 }
 
-g0(int i) {
-    return i+4;
+int f0(int i) {
+  int k,j;
+  k = 3+i;
+  j = g0(i+3);
+  return k+4+j;
 }
 
-
 typedef void *stack;
 
 __code f_g0(int i,int k,stack sp) ;
 
 struct cont_interface { // General Return Continuation
-    __code (*ret)(int, void*);
+  __code (*ret)(int, void*);
 };
 
 __code f(int i,stack sp) {
-    int k,j;
-    k = 3+i;
-    goto f_g0(i,k,sp);
+  int k,j;
+  k = 3+i;
+  goto f_g0(i,k,sp);
 }
 
 struct f_g0_interface {  // Specialized Return Continuation
-    __code (*ret)();
-    int i_,k_,j_;
+  __code (*ret)();
+  int i_,k_,j_;
 };
 
 __code f_g1(int j,stack sp);
 __code g(int i,stack sp) ;
 
 __code f_g0(int i,int k,stack sp) { // Caller
-    struct f_g0_interface *c = 
-	(struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface));
+  struct f_g0_interface *c = 
+    (struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface));
+  
+  c->ret = f_g1;
+  c->k_ = k;
+  c->i_ = i;
 
-    c->ret = f_g1;
-    c->k_ = k;
-    c->i_ = i;
-
-    goto g(i+3,sp);
+  goto g(i+3,sp);
 }
 
 __code f_g1(int j,stack sp) {  // Continuation 
-    struct f_g0_interface *c = (struct f_g0_interface *)sp;
-    int k = c->k_;
-    sp += sizeof(struct f_g0_interface);
-    goto (( (struct cont_interface *)sp)->ret)(k+4+j,sp);
+  struct f_g0_interface *c = (struct f_g0_interface *)sp;
+  int k = c->k_;
+  sp += sizeof(struct f_g0_interface);
+  goto (( (struct cont_interface *)sp)->ret)(k+4+j,sp);
 }
 
 __code g(int i,stack sp) {
-    goto (( (struct cont_interface *)sp)->ret)(i+4,sp);
+  goto (( (struct cont_interface *)sp)->ret)(i+4,sp);
 }
 
 struct main_continuation { // General Return Continuation
-    __code (*ret)(int, void*);
-    __code (*main_ret)(int, void*);
-    void *env;
+  __code (*ret)(int, void*);
+  __code (*main_ret)(int, void*);
+  void *env;
 };
 
 __code main_return(int i,stack sp) {
-    printf("#0061:%d\n",i);
-    goto (( (struct main_continuation *)sp)->main_ret)(i,
-           ((struct main_continuation *)sp)->env);
+  printf("#0061:%d\n",i);
+  goto (( (struct main_continuation *)sp)->main_ret)(i,
+                                                     ((struct main_continuation *)sp)->env);
 }
 
 #define STACK_SIZE 2048
@@ -76,17 +80,17 @@
 int
 main(int argc, char **argv)
 {
-    struct main_continuation *cont;
-    stack sp = stack_last;
+  struct main_continuation *cont;
+  stack sp = stack_last;
 
-    printf("#0075:%d\n",f0(233));
+  printf("#0075:%d\n",f0(233));
 
-    sp -= sizeof(*cont);
-    cont = (struct main_continuation *)sp;
-    cont->ret = main_return;
-    cont->main_ret = (return_type) _CbC_return;
-    cont->env = _CbC_environment;
-    goto f(233,sp);
+  sp -= sizeof(*cont);
+  cont = (struct main_continuation *)sp;
+  cont->ret = main_return;
+  cont->main_ret = (return_type) _CbC_return;
+  cont->env = _CbC_environment;
+  goto f(233,sp);
 }
 
 /* end */