1 ; RUN: llvm-as < %s | llvm-dis > %t.orig 2 ; RUN: llvm-as < %s | llvm-c-test --echo > %t.echo 3 ; RUN: diff -w %t.orig %t.echo 4 5 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" 6 target triple = "x86_64-apple-macosx10.11.0" 7 8 %S = type { i64, %S* } 9 10 @var = global i32 42 11 @ext = external global i32* 12 @cst = constant %S { i64 1, %S* @cst } 13 @tl = thread_local global { i64, %S* } { i64 1, %S* @cst } 14 @arr = linkonce_odr global [5 x i8] [ i8 2, i8 3, i8 5, i8 7, i8 11 ] 15 @str = private unnamed_addr constant [13 x i8] c"hello world\0A\00" 16 @hidden = hidden global i32 7 17 @protected = protected global i32 23 18 @section = global i32 27, section ".custom" 19 @align = global i32 31, align 4 20 21 define { i64, %S* } @unpackrepack(%S %s) { 22 %1 = extractvalue %S %s, 0 23 %2 = extractvalue %S %s, 1 24 %3 = insertvalue { i64, %S* } undef, %S* %2, 1 25 %4 = insertvalue { i64, %S* } %3, i64 %1, 0 26 ret { i64, %S* } %4 27 } 28 29 declare void @decl() 30 31 ; TODO: label and metadata types 32 define void @types() { 33 %1 = alloca half 34 %2 = alloca float 35 %3 = alloca double 36 %4 = alloca x86_fp80 37 %5 = alloca fp128 38 %6 = alloca ppc_fp128 39 %7 = alloca i7 40 %8 = alloca void (i1)* 41 %9 = alloca [3 x i22] 42 %10 = alloca i328 addrspace(5)* 43 %11 = alloca <5 x i23*> 44 %12 = alloca x86_mmx 45 ret void 46 } 47 48 define i32 @iops(i32 %a, i32 %b) { 49 %1 = add i32 %a, %b 50 %2 = mul i32 %a, %1 51 %3 = sub i32 %2, %1 52 %4 = udiv i32 %3, %b 53 %5 = sdiv i32 %2, %4 54 %6 = urem i32 %3, %5 55 %7 = srem i32 %2, %6 56 %8 = shl i32 %1, %b 57 %9 = lshr i32 %a, %7 58 %10 = ashr i32 %b, %8 59 %11 = and i32 %9, %10 60 %12 = or i32 %2, %11 61 %13 = xor i32 %12, %4 62 ret i32 %13 63 } 64 65 define i32 @call() { 66 %1 = call i32 @iops(i32 23, i32 19) 67 ret i32 %1 68 } 69 70 define i32 @cond(i32 %a, i32 %b) { 71 br label %br 72 unreachable: 73 unreachable 74 br: 75 %1 = icmp eq i32 %a, %b 76 br i1 %1, label %next0, label %unreachable 77 next0: 78 %2 = icmp ne i32 %a, %b 79 br i1 %2, label %next1, label %unreachable 80 next1: 81 %3 = icmp ugt i32 %a, %b 82 br i1 %3, label %next2, label %unreachable 83 next2: 84 %4 = icmp uge i32 %a, %b 85 br i1 %4, label %next3, label %unreachable 86 next3: 87 %5 = icmp ult i32 %a, %b 88 br i1 %5, label %next4, label %unreachable 89 next4: 90 %6 = icmp ule i32 %a, %b 91 br i1 %6, label %next5, label %unreachable 92 next5: 93 %7 = icmp sgt i32 %a, %b 94 br i1 %7, label %next6, label %unreachable 95 next6: 96 %8 = icmp sge i32 %a, %b 97 br i1 %8, label %next7, label %unreachable 98 next7: 99 %9 = icmp slt i32 %a, %b 100 br i1 %9, label %next8, label %unreachable 101 next8: 102 %10 = icmp sle i32 %a, %b 103 br i1 %10, label %next9, label %unreachable 104 next9: 105 ret i32 0 106 } 107 108 define i32 @loop(i32 %i) { 109 br label %cond 110 cond: 111 %c = phi i32 [ %i, %0 ], [ %j, %do ] 112 %p = phi i32 [ %r, %do ], [ 789, %0 ] 113 %1 = icmp eq i32 %c, 0 114 br i1 %1, label %do, label %done 115 do: 116 %2 = sub i32 %p, 23 117 %j = sub i32 %i, 1 118 %r = mul i32 %2, 3 119 br label %cond 120 done: 121 ret i32 %p 122 } 123