| Jakob Stoklund Olesen | 78b9f8f | 2012-09-13 16:52:17 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s | FileCheck %s | 
| Chris Lattner | 22afea7 | 2012-06-01 05:03:31 +0000 | [diff] [blame] | 2 | target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" | 
|  | 3 | target triple = "x86_64-apple-darwin11.4.0" | 
|  | 4 |  | 
|  | 5 | declare i64 @testi() | 
|  | 6 |  | 
|  | 7 | define i64 @test_trivial() { | 
|  | 8 | %A = tail call i64 @testi() | 
|  | 9 | ret i64 %A | 
|  | 10 | } | 
|  | 11 | ; CHECK: test_trivial: | 
|  | 12 | ; CHECK: jmp	_testi                  ## TAILCALL | 
|  | 13 |  | 
|  | 14 |  | 
|  | 15 | define i64 @test_noop_bitcast() { | 
|  | 16 | %A = tail call i64 @testi() | 
|  | 17 | %B = bitcast i64 %A to i64 | 
|  | 18 | ret i64 %B | 
|  | 19 | } | 
|  | 20 | ; CHECK: test_noop_bitcast: | 
|  | 21 | ; CHECK: jmp	_testi                  ## TAILCALL | 
| Chris Lattner | 182fe3e | 2012-06-01 05:16:33 +0000 | [diff] [blame] | 22 |  | 
|  | 23 |  | 
|  | 24 | ; Tail call shouldn't be blocked by no-op inttoptr. | 
|  | 25 | define i8* @test_inttoptr() { | 
|  | 26 | %A = tail call i64 @testi() | 
|  | 27 | %B = inttoptr i64 %A to i8* | 
|  | 28 | ret i8* %B | 
|  | 29 | } | 
|  | 30 |  | 
|  | 31 | ; CHECK: test_inttoptr: | 
|  | 32 | ; CHECK: jmp	_testi                  ## TAILCALL | 
|  | 33 |  | 
|  | 34 |  | 
|  | 35 | declare <4 x float> @testv() | 
|  | 36 |  | 
|  | 37 | define <4 x i32> @test_vectorbitcast() { | 
|  | 38 | %A = tail call <4 x float> @testv() | 
|  | 39 | %B = bitcast <4 x float> %A to <4 x i32> | 
|  | 40 | ret <4 x i32> %B | 
|  | 41 | } | 
|  | 42 | ; CHECK: test_vectorbitcast: | 
|  | 43 | ; CHECK: jmp	_testv                  ## TAILCALL | 
| Chris Lattner | 466076b | 2012-06-01 05:29:15 +0000 | [diff] [blame] | 44 |  | 
|  | 45 |  | 
|  | 46 | declare { i64, i64 } @testp() | 
|  | 47 |  | 
|  | 48 | define {i64, i64} @test_pair_trivial() { | 
|  | 49 | %A = tail call { i64, i64} @testp() | 
|  | 50 | ret { i64, i64} %A | 
|  | 51 | } | 
|  | 52 | ; CHECK: test_pair_trivial: | 
|  | 53 | ; CHECK: jmp	_testp                  ## TAILCALL | 
|  | 54 |  | 
|  | 55 |  | 
|  | 56 |  | 
|  | 57 | define {i64, i64} @test_pair_trivial_extract() { | 
|  | 58 | %A = tail call { i64, i64} @testp() | 
|  | 59 | %x = extractvalue { i64, i64} %A, 0 | 
|  | 60 | %y = extractvalue { i64, i64} %A, 1 | 
|  | 61 |  | 
|  | 62 | %b = insertvalue {i64, i64} undef, i64 %x, 0 | 
|  | 63 | %c = insertvalue {i64, i64} %b, i64 %y, 1 | 
|  | 64 |  | 
|  | 65 | ret { i64, i64} %c | 
|  | 66 | } | 
|  | 67 |  | 
|  | 68 | ; CHECK: test_pair_trivial_extract: | 
|  | 69 | ; CHECK: jmp	_testp                  ## TAILCALL | 
|  | 70 |  | 
|  | 71 | define {i8*, i64} @test_pair_conv_extract() { | 
|  | 72 | %A = tail call { i64, i64} @testp() | 
|  | 73 | %x = extractvalue { i64, i64} %A, 0 | 
|  | 74 | %y = extractvalue { i64, i64} %A, 1 | 
|  | 75 |  | 
|  | 76 | %x1 = inttoptr i64 %x to i8* | 
|  | 77 |  | 
|  | 78 | %b = insertvalue {i8*, i64} undef, i8* %x1, 0 | 
|  | 79 | %c = insertvalue {i8*, i64} %b, i64 %y, 1 | 
|  | 80 |  | 
|  | 81 | ret { i8*, i64} %c | 
|  | 82 | } | 
|  | 83 |  | 
|  | 84 | ; CHECK: test_pair_conv_extract: | 
|  | 85 | ; CHECK: jmp	_testp                  ## TAILCALL | 
|  | 86 |  | 
|  | 87 |  | 
|  | 88 |  | 
| Chris Lattner | b135989 | 2012-06-01 18:19:46 +0000 | [diff] [blame] | 89 | ; PR13006 | 
|  | 90 | define { i64, i64 } @crash(i8* %this) { | 
|  | 91 | %c = tail call { i64, i64 } @testp() | 
|  | 92 | %mrv7 = insertvalue { i64, i64 } %c, i64 undef, 1 | 
|  | 93 | ret { i64, i64 } %mrv7 | 
|  | 94 | } | 
|  | 95 |  | 
| Chris Lattner | 466076b | 2012-06-01 05:29:15 +0000 | [diff] [blame] | 96 |  |