Amaury Sechet | e8ea7d8 | 2016-02-04 23:26:19 +0000 | [diff] [blame] | 1 | ; RUN: llvm-as < %s | llvm-dis > %t.orig |
| 2 | ; RUN: llvm-as < %s | llvm-c-test --echo > %t.echo |
Reid Kleckner | 6da9115 | 2016-02-05 18:21:28 +0000 | [diff] [blame] | 3 | ; RUN: diff -w %t.orig %t.echo |
Amaury Sechet | e8ea7d8 | 2016-02-04 23:26:19 +0000 | [diff] [blame] | 4 | |
Amaury Sechet | 5590967 | 2016-02-16 05:11:24 +0000 | [diff] [blame] | 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 | |
Amaury Sechet | aad9353 | 2016-02-10 00:38:50 +0000 | [diff] [blame] | 8 | %S = type { i64, %S* } |
| 9 | |
Amaury Sechet | e8ba2bf | 2016-02-17 22:13:33 +0000 | [diff] [blame] | 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 } |
Amaury Sechet | b325686 | 2016-03-13 00:58:25 +0000 | [diff] [blame] | 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" |
Amaury Sechet | e8ba2bf | 2016-02-17 22:13:33 +0000 | [diff] [blame] | 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 | |
Amaury Sechet | aad9353 | 2016-02-10 00:38:50 +0000 | [diff] [blame] | 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 | |
Amaury Sechet | e8ea7d8 | 2016-02-04 23:26:19 +0000 | [diff] [blame] | 29 | declare void @decl() |
| 30 | |
Amaury Sechet | aad9353 | 2016-02-10 00:38:50 +0000 | [diff] [blame] | 31 | ; TODO: label and metadata types |
Amaury Sechet | e8ea7d8 | 2016-02-04 23:26:19 +0000 | [diff] [blame] | 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 | |
Amaury Sechet | b6df435 | 2016-02-05 01:27:11 +0000 | [diff] [blame] | 48 | define i32 @iops(i32 %a, i32 %b) { |
Amaury Sechet | e8ea7d8 | 2016-02-04 23:26:19 +0000 | [diff] [blame] | 49 | %1 = add i32 %a, %b |
Amaury Sechet | b6df435 | 2016-02-05 01:27:11 +0000 | [diff] [blame] | 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 |
Amaury Sechet | e8ea7d8 | 2016-02-04 23:26:19 +0000 | [diff] [blame] | 63 | } |
| 64 | |
| 65 | define i32 @call() { |
Amaury Sechet | b6df435 | 2016-02-05 01:27:11 +0000 | [diff] [blame] | 66 | %1 = call i32 @iops(i32 23, i32 19) |
Amaury Sechet | e8ea7d8 | 2016-02-04 23:26:19 +0000 | [diff] [blame] | 67 | ret i32 %1 |
| 68 | } |
Amaury Sechet | a82042e | 2016-02-09 22:36:41 +0000 | [diff] [blame] | 69 | |
Amaury Sechet | e7e6217 | 2016-02-09 23:15:02 +0000 | [diff] [blame] | 70 | define i32 @cond(i32 %a, i32 %b) { |
Amaury Sechet | a82042e | 2016-02-09 22:36:41 +0000 | [diff] [blame] | 71 | br label %br |
| 72 | unreachable: |
| 73 | unreachable |
| 74 | br: |
Amaury Sechet | e7e6217 | 2016-02-09 23:15:02 +0000 | [diff] [blame] | 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 |
Amaury Sechet | a82042e | 2016-02-09 22:36:41 +0000 | [diff] [blame] | 106 | } |
Amaury Sechet | 2f43208 | 2016-02-11 21:37:54 +0000 | [diff] [blame] | 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 | } |