1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -S -passes=instcombine < %s | FileCheck %s 3 4declare i32 @passthru_i32(i32 returned) 5declare ptr @passthru_p8(ptr returned) 6declare ptr @passthru_p8_from_p32(ptr returned) 7declare <8 x i8> @passthru_8i8v_from_2i32v(<2 x i32> returned) 8 9define i32 @returned_const_int_arg() { 10; CHECK-LABEL: @returned_const_int_arg( 11; CHECK-NEXT: [[X:%.*]] = call i32 @passthru_i32(i32 42) 12; CHECK-NEXT: ret i32 42 13; 14 %x = call i32 @passthru_i32(i32 42) 15 ret i32 %x 16} 17 18define ptr @returned_const_ptr_arg() { 19; CHECK-LABEL: @returned_const_ptr_arg( 20; CHECK-NEXT: [[X:%.*]] = call ptr @passthru_p8(ptr null) 21; CHECK-NEXT: ret ptr null 22; 23 %x = call ptr @passthru_p8(ptr null) 24 ret ptr %x 25} 26 27define ptr @returned_const_ptr_arg_casted() { 28; CHECK-LABEL: @returned_const_ptr_arg_casted( 29; CHECK-NEXT: [[X:%.*]] = call ptr @passthru_p8_from_p32(ptr null) 30; CHECK-NEXT: ret ptr null 31; 32 %x = call ptr @passthru_p8_from_p32(ptr null) 33 ret ptr %x 34} 35 36define ptr @returned_ptr_arg_casted(ptr %a) { 37; CHECK-LABEL: @returned_ptr_arg_casted( 38; CHECK-NEXT: [[X:%.*]] = call ptr @passthru_p8_from_p32(ptr [[A:%.*]]) 39; CHECK-NEXT: ret ptr [[A]] 40; 41 %x = call ptr @passthru_p8_from_p32(ptr %a) 42 ret ptr %x 43} 44 45@GV = constant <2 x i32> zeroinitializer 46define <8 x i8> @returned_const_vec_arg_casted() { 47; CHECK-LABEL: @returned_const_vec_arg_casted( 48; CHECK-NEXT: [[X:%.*]] = call <8 x i8> @passthru_8i8v_from_2i32v(<2 x i32> zeroinitializer) 49; CHECK-NEXT: ret <8 x i8> zeroinitializer 50; 51 %v = load <2 x i32>, ptr @GV 52 %x = call <8 x i8> @passthru_8i8v_from_2i32v(<2 x i32> %v) 53 ret <8 x i8> %x 54} 55 56define <8 x i8> @returned_vec_arg_casted(<2 x i32> %a) { 57; CHECK-LABEL: @returned_vec_arg_casted( 58; CHECK-NEXT: [[X:%.*]] = bitcast <2 x i32> [[A:%.*]] to <8 x i8> 59; CHECK-NEXT: [[TMP1:%.*]] = call <8 x i8> @passthru_8i8v_from_2i32v(<2 x i32> [[A]]) 60; CHECK-NEXT: ret <8 x i8> [[X]] 61; 62 %x = call <8 x i8> @passthru_8i8v_from_2i32v(<2 x i32> %a) 63 ret <8 x i8> %x 64} 65 66define i32 @returned_var_arg(i32 %arg) { 67; CHECK-LABEL: @returned_var_arg( 68; CHECK-NEXT: [[X:%.*]] = call i32 @passthru_i32(i32 [[ARG:%.*]]) 69; CHECK-NEXT: ret i32 [[ARG]] 70; 71 %x = call i32 @passthru_i32(i32 %arg) 72 ret i32 %x 73} 74 75define i32 @returned_const_int_arg_musttail(i32 %arg) { 76; CHECK-LABEL: @returned_const_int_arg_musttail( 77; CHECK-NEXT: [[X:%.*]] = musttail call i32 @passthru_i32(i32 42) 78; CHECK-NEXT: ret i32 [[X]] 79; 80 %x = musttail call i32 @passthru_i32(i32 42) 81 ret i32 %x 82} 83 84define i32 @returned_var_arg_musttail(i32 %arg) { 85; CHECK-LABEL: @returned_var_arg_musttail( 86; CHECK-NEXT: [[X:%.*]] = musttail call i32 @passthru_i32(i32 [[ARG:%.*]]) 87; CHECK-NEXT: ret i32 [[X]] 88; 89 %x = musttail call i32 @passthru_i32(i32 %arg) 90 ret i32 %x 91} 92 93