Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s | FileCheck %s
      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
     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
     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 
     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 
     96 
     97