Advertisement
karlicoss

not :: Bool -> Bool

Jun 26th, 2015
2,846
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
LLVM 1.48 KB | None | 0 0
  1. ; Bool declaration
  2. %Bool = type { i32 }
  3. @false = internal global %Bool { i32 0 }
  4. @true = internal global %Bool { i32 1 }
  5. ; end of Bool declaration
  6. %Cl1 = type {  }
  7.  
  8.  
  9. define %Bool @apply_Cl1(%Cl1* %env, %Bool* %x) {
  10.   %tmp0 = load %Bool* %x
  11.   %local0 = extractvalue %Bool %tmp0, 0
  12.   %tmp1 = alloca %Bool; case expression result
  13.   switch i32 %local0, label %lbl0 [ i32 1, label %lbl2 i32 0, label %lbl3 ]
  14.     lbl2:
  15.     %tmp2 = load %Bool* @false
  16.     store %Bool %tmp2, %Bool* %tmp1; set result
  17.     br label %lbl1
  18.    
  19.  
  20.     lbl3:
  21.     %tmp3 = load %Bool* @true
  22.     store %Bool %tmp3, %Bool* %tmp1; set result
  23.     br label %lbl1
  24.    
  25.  
  26.     lbl0:
  27.     br label %lbl1
  28.     lbl1:
  29.   %v0 = load %Bool* %tmp1
  30.   ret %Bool %v0
  31. }
  32. ; Code:
  33. @buf = global [2 x i8] c"H\00"
  34. declare i32 @puts(i8*)
  35. define i32 @main() {
  36.   %tmp4 = alloca %Cl1
  37.   %v1 = load %Cl1* %tmp4
  38.   %tmp5 = load %Bool* @false
  39.   %arg0 = alloca %Cl1
  40.   %arg1 = alloca %Bool
  41.   store %Cl1 %v1, %Cl1* %arg0
  42.   store %Bool %tmp5, %Bool* %arg1
  43.   %v2 = call %Bool @apply_Cl1(%Cl1* %arg0, %Bool* %arg1)
  44.  
  45.   ; result output routines
  46.   %res_ptr = alloca %Bool
  47.   store %Bool %v2, %Bool* %res_ptr
  48.   %inner = getelementptr %Bool* %res_ptr, i32 0, i32 0
  49.   %res = load i32* %inner
  50.          
  51.   %tres = trunc i32 %res to i8
  52.   %chres = add i8 48, %tres
  53.   %str = getelementptr [2 x i8]* @buf, i32 0, i32 0
  54.   store i8 %chres, i8* %str
  55.   call i32 @puts(i8* getelementptr inbounds ([2 x i8]* @buf, i32 0, i32 0))
  56.   ret i32 0
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement