// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -I %S/Inputs/abi %s -emit-ir | %FileCheck %s --check-prefix=CHECK-%target-cpu

sil_stage canonical
import c_layout
import Builtin
import Swift

// TODO: Provide tests for other architectures

// CHECK-x86_64: %TSo11BitfieldOneV = type <{ %Ts6UInt32V, %TSo6NestedV, [4 x i8], [4 x i8], %TSf, [1 x i8], [7 x i8], %Ts6UInt64V, %Ts6UInt32V, [4 x i8] }>
// CHECK-x86_64: %TSo6NestedV = type <{ %TSf, [3 x i8], [1 x i8] }>

// CHECK-x86_64: %TSo26BitfieldSeparatorReferenceV = type [[BITFIELD_SEP_TYPE:<{ %Ts5UInt8V, \[3 x i8\], %Ts5UInt8V }>]]
// CHECK-x86_64: %TSo25BitfieldSeparatorSameNameV = type [[BITFIELD_SEP_TYPE]]
// CHECK-x86_64: %TSo36BitfieldSeparatorDifferentNameStructV = type [[BITFIELD_SEP_TYPE]]
// CHECK-x86_64: %TSo21BitfieldSeparatorAnona = type [[BITFIELD_SEP_TYPE]]

sil public_external @createBitfieldOne : $@convention(c) () -> BitfieldOne
sil public_external @consumeBitfieldOne : $@convention(c) (BitfieldOne) -> ()

sil @test0 : $() -> () {
bb0:
  %0 = function_ref @createBitfieldOne : $@convention(c) () -> BitfieldOne
  %1 = apply %0() : $@convention(c) () -> BitfieldOne
  %2 = function_ref @consumeBitfieldOne : $@convention(c) (BitfieldOne) -> ()
  apply %2(%1) : $@convention(c) (BitfieldOne) -> ()
  %r = tuple ()
  return %r : $()
}
// CHECK-x86_64: define{{( protected)?}} swiftcc void @test0()
// CHECK-x86_64:   [[RESULT:%.*]] = alloca %TSo11BitfieldOneV, align 8
// CHECK-x86_64:   [[ARG:%.*]] = alloca %TSo11BitfieldOneV, align 8
//   Make the first call and pull all the values out of the indirect result.
// CHECK-x86_64:   call void @createBitfieldOne(%TSo11BitfieldOneV* noalias nocapture sret [[RESULT]])
// CHECK-x86_64:   [[ADDR_A:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[RESULT]], i32 0, i32 0
// CHECK-x86_64:   [[ADDR_A_V:%.*]] = getelementptr inbounds %Ts6UInt32V, %Ts6UInt32V* [[ADDR_A]], i32 0, i32 0
// CHECK-x86_64:   [[A:%.*]] = load i32, i32* [[ADDR_A_V]], align 8
// CHECK-x86_64:   [[ADDR_B:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[RESULT]], i32 0, i32 1
// CHECK-x86_64:   [[ADDR_B_X:%.*]] = getelementptr inbounds %TSo6NestedV, %TSo6NestedV* [[ADDR_B]], i32 0, i32 0
// CHECK-x86_64:   [[ADDR_B_X_V:%.*]] = getelementptr inbounds %TSf, %TSf* [[ADDR_B_X]], i32 0, i32 0
// CHECK-x86_64:   [[B_X:%.*]] = load float, float* [[ADDR_B_X_V]], align 4
// CHECK-x86_64:   [[ADDR_B_YZ:%.*]] = getelementptr inbounds %TSo6NestedV, %TSo6NestedV* [[ADDR_B]], i32 0, i32 1
// CHECK-x86_64:   [[ADDR_B_YZ_1:%.*]] = bitcast [3 x i8]* [[ADDR_B_YZ]] to i24*
// CHECK-x86_64:   [[B_YZ:%.*]] = load i24, i24* [[ADDR_B_YZ_1]], align 4
// CHECK-x86_64:   [[ADDR_CDE:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[RESULT]], i32 0, i32 2
// CHECK-x86_64:   [[ADDR_CDE_1:%.*]] = bitcast [4 x i8]* [[ADDR_CDE]] to i32*
// CHECK-x86_64:   [[CDE:%.*]] = load i32, i32* [[ADDR_CDE_1]], align 4
// CHECK-x86_64:   [[ADDR_FGH:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[RESULT]], i32 0, i32 3
// CHECK-x86_64:   [[ADDR_FGH_1:%.*]] = bitcast [4 x i8]* [[ADDR_FGH]] to i32*
// CHECK-x86_64:   [[FGH:%.*]] = load i32, i32* [[ADDR_FGH_1]], align 8
// CHECK-x86_64:   [[ADDR_I:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[RESULT]], i32 0, i32 4
// CHECK-x86_64:   [[ADDR_I_V:%.*]] = getelementptr inbounds %TSf, %TSf* [[ADDR_I]], i32 0, i32 0
// CHECK-x86_64:   [[I:%.*]] = load float, float* [[ADDR_I_V]], align 4
// CHECK-x86_64:   [[ADDR_JK:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[RESULT]], i32 0, i32 5
// CHECK-x86_64:   [[ADDR_JK_1:%.*]] = bitcast [1 x i8]* [[ADDR_JK]] to i8*
// CHECK-x86_64:   [[JK:%.*]] = load i8, i8* [[ADDR_JK_1]], align 8
// CHECK-x86_64:   [[ADDR_L:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[RESULT]], i32 0, i32 7
// CHECK-x86_64:   [[ADDR_L_V:%.*]] = getelementptr inbounds %Ts6UInt64V, %Ts6UInt64V* [[ADDR_L]], i32 0, i32 0
// CHECK-x86_64:   [[L:%.*]] = load i64, i64* [[ADDR_L_V]], align 8
// CHECK-x86_64:   [[ADDR_M:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[RESULT]], i32 0, i32 8
// CHECK-x86_64:   [[ADDR_M_V:%.*]] = getelementptr inbounds %Ts6UInt32V, %Ts6UInt32V* [[ADDR_M]], i32 0, i32 0
// CHECK-x86_64:   [[M:%.*]] = load i32, i32* [[ADDR_M_V]], align 8
//   Put all of the values into the indirect argument and make the second call.
// CHECK-x86_64:   [[ADDR_A:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[ARG]], i32 0, i32 0
// CHECK-x86_64:   [[ADDR_A_V:%.*]] = getelementptr inbounds %Ts6UInt32V, %Ts6UInt32V* [[ADDR_A]], i32 0, i32 0
// CHECK-x86_64:   store i32 [[A]], i32* [[ADDR_A_V]], align 8
// CHECK-x86_64:   [[ADDR_B:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[ARG]], i32 0, i32 1
// CHECK-x86_64:   [[ADDR_B_X:%.*]] = getelementptr inbounds %TSo6NestedV, %TSo6NestedV* [[ADDR_B]], i32 0, i32 0
// CHECK-x86_64:   [[ADDR_B_X_V:%.*]] = getelementptr inbounds %TSf, %TSf* [[ADDR_B_X]], i32 0, i32 0
// CHECK-x86_64:   store float [[B_X]], float* [[ADDR_B_X_V]], align 4
// CHECK-x86_64:   [[ADDR_B_YZ:%.*]] = getelementptr inbounds %TSo6NestedV, %TSo6NestedV* [[ADDR_B]], i32 0, i32 1
// CHECK-x86_64:   [[ADDR_B_YZ_1:%.*]] = bitcast [3 x i8]* [[ADDR_B_YZ]] to i24*
// CHECK-x86_64:   store i24 [[B_YZ]], i24* [[ADDR_B_YZ_1]], align 4
// CHECK-x86_64:   [[ADDR_CDE:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[ARG]], i32 0, i32 2
// CHECK-x86_64:   [[ADDR_CDE_1:%.*]] = bitcast [4 x i8]* [[ADDR_CDE]] to i32*
// CHECK-x86_64:   store i32 [[CDE]], i32* [[ADDR_CDE_1]], align 4
// CHECK-x86_64:   [[ADDR_FGH:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[ARG]], i32 0, i32 3
// CHECK-x86_64:   [[ADDR_FGH_1:%.*]] = bitcast [4 x i8]* [[ADDR_FGH]] to i32*
// CHECK-x86_64:   store i32 [[FGH]], i32* [[ADDR_FGH_1]], align 8
// CHECK-x86_64:   [[ADDR_I:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[ARG]], i32 0, i32 4
// CHECK-x86_64:   [[ADDR_I_V:%.*]] = getelementptr inbounds %TSf, %TSf* [[ADDR_I]], i32 0, i32 0
// CHECK-x86_64:   store float [[I]], float* [[ADDR_I_V]], align 4
// CHECK-x86_64:   [[ADDR_JK:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[ARG]], i32 0, i32 5
// CHECK-x86_64:   [[ADDR_JK_1:%.*]] = bitcast [1 x i8]* [[ADDR_JK]] to i8*
// CHECK-x86_64:   store i8 [[JK]], i8* [[ADDR_JK_1]], align 8
// CHECK-x86_64:   [[ADDR_L:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[ARG]], i32 0, i32 7
// CHECK-x86_64:   [[ADDR_L_V:%.*]] = getelementptr inbounds %Ts6UInt64V, %Ts6UInt64V* [[ADDR_L]], i32 0, i32 0
// CHECK-x86_64:   store i64 [[L]], i64* [[ADDR_L_V]], align 8
// CHECK-x86_64:   [[ADDR_M:%.*]] = getelementptr inbounds %TSo11BitfieldOneV, %TSo11BitfieldOneV* [[ARG]], i32 0, i32 8
// CHECK-x86_64:   [[ADDR_M_V:%.*]] = getelementptr inbounds %Ts6UInt32V, %Ts6UInt32V* [[ADDR_M]], i32 0, i32 0
// CHECK-x86_64:   store i32 [[M]], i32* [[ADDR_M_V]], align 8
// CHECK-x86_64:   call void @consumeBitfieldOne(%TSo11BitfieldOneV* byval align 8 [[ARG]])
// CHECK-x86_64:   ret void


sil public_external @testBitfields : $@convention(thin) () -> (BitfieldSeparatorReference, BitfieldSeparatorSameName, BitfieldSeparatorDifferentNameStruct, BitfieldSeparatorAnon)

sil @testTypedefs : $() -> () {
bb0:
  %0 = function_ref @testBitfields : $@convention(thin) () -> (BitfieldSeparatorReference, BitfieldSeparatorSameName, BitfieldSeparatorDifferentNameStruct, BitfieldSeparatorAnon)
  %1 = apply %0() : $@convention(thin) () -> (BitfieldSeparatorReference, BitfieldSeparatorSameName, BitfieldSeparatorDifferentNameStruct, BitfieldSeparatorAnon)
  %r = tuple ()
  return %r : $()
}

sil public_external @createSIMDStruct : $@convention(c) () -> SIMDStruct
sil public_external @consumeSIMDStruct : $@convention(c) SIMDStruct -> ()

// CHECK-x86_64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testSIMDStruct()
// CHECK-x86_64:         call <3 x float> @createSIMDStruct
// CHECK-x86_64:         call void @consumeSIMDStruct(<3 x float>
sil @testSIMDStruct : $() -> () {
bb0:
  %f = function_ref @createSIMDStruct : $@convention(c) () -> SIMDStruct
  %x = apply %f() : $@convention(c) () -> SIMDStruct
  %g = function_ref @consumeSIMDStruct : $@convention(c) SIMDStruct -> ()
  %z = apply %g(%x) : $@convention(c) SIMDStruct -> ()
  return undef : $()
}

sil @testRecursive : $@convention(thin) () -> Builtin.Word {
bb0:
  %m = metatype $@thin HasRecursivePointers.Type
  %s = builtin "sizeof"<HasRecursivePointers>(%m : $@thin HasRecursivePointers.Type) : $Builtin.Word
  return %s : $Builtin.Word
}

// CHECK-x86_64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testIntegerExtension
// CHECK-x86_64:         call signext i8 @chareth(i8 signext
// CHECK-x86_64:         call signext i8 @signedChareth(i8 signext
// CHECK-x86_64:         call zeroext i8 @unsignedChareth(i8 zeroext
// CHECK-x86_64:         call signext i16 @eatMyShorts(i16 signext
// CHECK-x86_64:         call zeroext i16 @eatMyUnsignedShorts(i16 zeroext
// CHECK-x86_64:         call i32 @ints(i32 %5)
// CHECK-x86_64:         call i32 @unsigneds(i32 %6)
// CHECK-x86_64-LABEL: declare{{( dllimport)?}} signext i8 @chareth(i8 signext)
// CHECK-x86_64-LABEL: declare{{( dllimport)?}} signext i8 @signedChareth(i8 signext)
// CHECK-x86_64-LABEL: declare{{( dllimport)?}} zeroext i8 @unsignedChareth(i8 zeroext)
// CHECK-x86_64-LABEL: declare{{( dllimport)?}} signext i16 @eatMyShorts(i16 signext)
// CHECK-x86_64-LABEL: declare{{( dllimport)?}} zeroext i16 @eatMyUnsignedShorts(i16 zeroext)
// CHECK-x86_64-LABEL: declare{{( dllimport)?}} i32 @ints(i32)
// CHECK-x86_64-LABEL: declare{{( dllimport)?}} i32 @unsigneds(i32)

// CHECK-i386-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testIntegerExtension
// CHECK-i386:         call signext i8 @chareth(i8 signext
// CHECK-i386:         call signext i8 @signedChareth(i8 signext
// CHECK-i386:         call zeroext i8 @unsignedChareth(i8 zeroext
// CHECK-i386:         call signext i16 @eatMyShorts(i16 signext
// CHECK-i386:         call zeroext i16 @eatMyUnsignedShorts(i16 zeroext
// CHECK-i386:         call i32 @ints(i32 %5)
// CHECK-i386:         call i32 @unsigneds(i32 %6)
// CHECK-i386-LABEL: declare{{( dllimport)?}} signext i8 @chareth(i8 signext)
// CHECK-i386-LABEL: declare{{( dllimport)?}} signext i8 @signedChareth(i8 signext)
// CHECK-i386-LABEL: declare{{( dllimport)?}} zeroext i8 @unsignedChareth(i8 zeroext)
// CHECK-i386-LABEL: declare{{( dllimport)?}} signext i16 @eatMyShorts(i16 signext)
// CHECK-i386-LABEL: declare{{( dllimport)?}} zeroext i16 @eatMyUnsignedShorts(i16 zeroext)
// CHECK-i386-LABEL: declare{{( dllimport)?}} i32 @ints(i32)
// CHECK-i386-LABEL: declare{{( dllimport)?}} i32 @unsigneds(i32)

// CHECK-armv7-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testIntegerExtension
// CHECK-armv7:         call signext i8 @chareth(i8 signext
// CHECK-armv7:         call signext i8 @signedChareth(i8 signext
// CHECK-armv7:         call zeroext i8 @unsignedChareth(i8 zeroext
// CHECK-armv7:         call signext i16 @eatMyShorts(i16 signext
// CHECK-armv7:         call zeroext i16 @eatMyUnsignedShorts(i16 zeroext
// CHECK-armv7:         call i32 @ints(i32 %5)
// CHECK-armv7:         call i32 @unsigneds(i32 %6)
// CHECK-armv7-LABEL: declare{{( dllimport)?}} signext i8 @chareth(i8 signext)
// CHECK-armv7-LABEL: declare{{( dllimport)?}} signext i8 @signedChareth(i8 signext)
// CHECK-armv7-LABEL: declare{{( dllimport)?}} zeroext i8 @unsignedChareth(i8 zeroext)
// CHECK-armv7-LABEL: declare{{( dllimport)?}} signext i16 @eatMyShorts(i16 signext)
// CHECK-armv7-LABEL: declare{{( dllimport)?}} zeroext i16 @eatMyUnsignedShorts(i16 zeroext)
// CHECK-armv7-LABEL: declare{{( dllimport)?}} i32 @ints(i32)
// CHECK-armv7-LABEL: declare{{( dllimport)?}} i32 @unsigneds(i32)

// CHECK-armv7s-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testIntegerExtension
// CHECK-armv7s:         call signext i8 @chareth(i8 signext
// CHECK-armv7s:         call signext i8 @signedChareth(i8 signext
// CHECK-armv7s:         call zeroext i8 @unsignedChareth(i8 zeroext
// CHECK-armv7s:         call signext i16 @eatMyShorts(i16 signext
// CHECK-armv7s:         call zeroext i16 @eatMyUnsignedShorts(i16 zeroext
// CHECK-armv7s:         call i32 @ints(i32 %5)
// CHECK-armv7s:         call i32 @unsigneds(i32 %6)
// CHECK-armv7s-LABEL: declare{{( dllimport)?}} signext i8 @chareth(i8 signext)
// CHECK-armv7s-LABEL: declare{{( dllimport)?}} signext i8 @signedChareth(i8 signext)
// CHECK-armv7s-LABEL: declare{{( dllimport)?}} zeroext i8 @unsignedChareth(i8 zeroext)
// CHECK-armv7s-LABEL: declare{{( dllimport)?}} signext i16 @eatMyShorts(i16 signext)
// CHECK-armv7s-LABEL: declare{{( dllimport)?}} zeroext i16 @eatMyUnsignedShorts(i16 zeroext)
// CHECK-armv7s-LABEL: declare{{( dllimport)?}} i32 @ints(i32)
// CHECK-armv7s-LABEL: declare{{( dllimport)?}} i32 @unsigneds(i32)

// CHECK-armv7k-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testIntegerExtension
// CHECK-armv7k:         call signext i8 @chareth(i8 signext
// CHECK-armv7k:         call signext i8 @signedChareth(i8 signext
// CHECK-armv7k:         call zeroext i8 @unsignedChareth(i8 zeroext
// CHECK-armv7k:         call signext i16 @eatMyShorts(i16 signext
// CHECK-armv7k:         call zeroext i16 @eatMyUnsignedShorts(i16 zeroext
// CHECK-armv7k:         call i32 @ints(i32 %5)
// CHECK-armv7k:         call i32 @unsigneds(i32 %6)
// CHECK-armv7k-LABEL: declare{{( dllimport)?}} signext i8 @chareth(i8 signext)
// CHECK-armv7k-LABEL: declare{{( dllimport)?}} signext i8 @signedChareth(i8 signext)
// CHECK-armv7k-LABEL: declare{{( dllimport)?}} zeroext i8 @unsignedChareth(i8 zeroext)
// CHECK-armv7k-LABEL: declare{{( dllimport)?}} signext i16 @eatMyShorts(i16 signext)
// CHECK-armv7k-LABEL: declare{{( dllimport)?}} zeroext i16 @eatMyUnsignedShorts(i16 zeroext)
// CHECK-armv7k-LABEL: declare{{( dllimport)?}} i32 @ints(i32)
// CHECK-armv7k-LABEL: declare{{( dllimport)?}} i32 @unsigneds(i32)

// CHECK-arm64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testIntegerExtension
// CHECK-arm64:         call signext i8 @chareth(i8 signext
// CHECK-arm64:         call signext i8 @signedChareth(i8 signext
// CHECK-arm64:         call zeroext i8 @unsignedChareth(i8 zeroext
// CHECK-arm64:         call signext i16 @eatMyShorts(i16 signext
// CHECK-arm64:         call zeroext i16 @eatMyUnsignedShorts(i16 zeroext
// CHECK-arm64:         call i32 @ints(i32 %5)
// CHECK-arm64:         call i32 @unsigneds(i32 %6)
// CHECK-arm64-LABEL: declare{{( dllimport)?}} signext i8 @chareth(i8 signext)
// CHECK-arm64-LABEL: declare{{( dllimport)?}} signext i8 @signedChareth(i8 signext)
// CHECK-arm64-LABEL: declare{{( dllimport)?}} zeroext i8 @unsignedChareth(i8 zeroext)
// CHECK-arm64-LABEL: declare{{( dllimport)?}} signext i16 @eatMyShorts(i16 signext)
// CHECK-arm64-LABEL: declare{{( dllimport)?}} zeroext i16 @eatMyUnsignedShorts(i16 zeroext)
// CHECK-arm64-LABEL: declare{{( dllimport)?}} i32 @ints(i32)
// CHECK-arm64-LABEL: declare{{( dllimport)?}} i32 @unsigneds(i32)

// CHECK-aarch64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testIntegerExtension
// CHECK-aarch64:         call i8 @chareth(i8 %0)
// CHECK-aarch64:         call i8 @signedChareth(i8 %1)
// CHECK-aarch64:         call i8 @unsignedChareth(i8 %2)
// CHECK-aarch64:         call i16 @eatMyShorts(i16 %3)
// CHECK-aarch64:         call i16 @eatMyUnsignedShorts(i16 %4)
// CHECK-aarch64:         call i32 @ints(i32 %5)
// CHECK-aarch64:         call i32 @unsigneds(i32 %6)
// CHECK-aarch64-LABEL: declare{{( dllimport)?}} i8 @chareth(i8)
// CHECK-aarch64-LABEL: declare{{( dllimport)?}} i8 @signedChareth(i8)
// CHECK-aarch64-LABEL: declare{{( dllimport)?}} i8 @unsignedChareth(i8)
// CHECK-aarch64-LABEL: declare{{( dllimport)?}} i16 @eatMyShorts(i16)
// CHECK-aarch64-LABEL: declare{{( dllimport)?}} i16 @eatMyUnsignedShorts(i16)
// CHECK-aarch64-LABEL: declare{{( dllimport)?}} i32 @ints(i32)
// CHECK-aarch64-LABEL: declare{{( dllimport)?}} i32 @unsigneds(i32)

// CHECK-powerpc64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testIntegerExtension
// CHECK-powerpc64:         call zeroext i8 @chareth(i8 zeroext
// CHECK-powerpc64:         call zeroext i8 @signedChareth(i8 zeroext
// CHECK-powerpc64:         call zeroext i8 @unsignedChareth(i8 zeroext
// CHECK-powerpc64:         call signext i16 @eatMyShorts(i16 signext
// CHECK-powerpc64:         call zeroext i16 @eatMyUnsignedShorts(i16 zeroext
// CHECK-powerpc64:         call signext i32 @ints(i32 signext %5)
// CHECK-powerpc64:         call zeroext i32 @unsigneds(i32 zeroext %6)
// CHECK-powerpc64-LABEL: declare{{( dllimport)?}} zeroext i8 @chareth(i8 zeroext)
// CHECK-powerpc64-LABEL: declare{{( dllimport)?}} zeroext i8 @signedChareth(i8 zeroext)
// CHECK-powerpc64-LABEL: declare{{( dllimport)?}} zeroext i8 @unsignedChareth(i8 zeroext)
// CHECK-powerpc64-LABEL: declare{{( dllimport)?}} signext i16 @eatMyShorts(i16 signext)
// CHECK-powerpc64-LABEL: declare{{( dllimport)?}} zeroext i16 @eatMyUnsignedShorts(i16 zeroext)
// CHECK-powerpc64-LABEL: declare{{( dllimport)?}} signext i32 @ints(i32 signext)
// CHECK-powerpc64-LABEL: declare{{( dllimport)?}} zeroext i32 @unsigneds(i32 zeroext)

// CHECK-powerpc64le-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testIntegerExtension
// CHECK-powerpc64le:         call zeroext i8 @chareth(i8 zeroext
// CHECK-powerpc64le:         call zeroext i8 @signedChareth(i8 zeroext
// CHECK-powerpc64le:         call zeroext i8 @unsignedChareth(i8 zeroext
// CHECK-powerpc64le:         call signext i16 @eatMyShorts(i16 signext
// CHECK-powerpc64le:         call zeroext i16 @eatMyUnsignedShorts(i16 zeroext
// CHECK-powerpc64le:         call signext i32 @ints(i32 signext %5)
// CHECK-powerpc64le:         call zeroext i32 @unsigneds(i32 zeroext %6)
// CHECK-powerpc64le-LABEL: declare{{( dllimport)?}} zeroext i8 @chareth(i8 zeroext)
// CHECK-powerpc64le-LABEL: declare{{( dllimport)?}} zeroext i8 @signedChareth(i8 zeroext)
// CHECK-powerpc64le-LABEL: declare{{( dllimport)?}} zeroext i8 @unsignedChareth(i8 zeroext)
// CHECK-powerpc64le-LABEL: declare{{( dllimport)?}} signext i16 @eatMyShorts(i16 signext)
// CHECK-powerpc64le-LABEL: declare{{( dllimport)?}} zeroext i16 @eatMyUnsignedShorts(i16 zeroext)
// CHECK-powerpc64le-LABEL: declare{{( dllimport)?}} signext i32 @ints(i32 signext)
// CHECK-powerpc64le-LABEL: declare{{( dllimport)?}} zeroext i32 @unsigneds(i32 zeroext)

// CHECK-s390x-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testIntegerExtension
// CHECK-s390x:         call zeroext i8 @chareth(i8 zeroext
// CHECK-s390x:         call zeroext i8 @signedChareth(i8 zeroext
// CHECK-s390x:         call zeroext i8 @unsignedChareth(i8 zeroext
// CHECK-s390x:         call signext i16 @eatMyShorts(i16 signext
// CHECK-s390x:         call zeroext i16 @eatMyUnsignedShorts(i16 zeroext
// CHECK-s390x:         call signext i32 @ints(i32 signext %5)
// CHECK-s390x:         call zeroext i32 @unsigneds(i32 zeroext %6)
// CHECK-s390x-LABEL: declare{{( dllimport)?}} zeroext i8 @chareth(i8 zeroext)
// CHECK-s390x-LABEL: declare{{( dllimport)?}} zeroext i8 @signedChareth(i8 zeroext)
// CHECK-s390x-LABEL: declare{{( dllimport)?}} zeroext i8 @unsignedChareth(i8 zeroext)
// CHECK-s390x-LABEL: declare{{( dllimport)?}} signext i16 @eatMyShorts(i16 signext)
// CHECK-s390x-LABEL: declare{{( dllimport)?}} zeroext i16 @eatMyUnsignedShorts(i16 zeroext)
// CHECK-s390x-LABEL: declare{{( dllimport)?}} signext i32 @ints(i32 signext)
// CHECK-s390x-LABEL: declare{{( dllimport)?}} zeroext i32 @unsigneds(i32 zeroext)

sil @testIntegerExtension : $@convention(thin) (CChar, CSignedChar, CUnsignedChar, CShort, CUnsignedShort, CInt, CUnsignedInt) -> () {
entry(%a : $CChar, %b : $CSignedChar, %c : $CUnsignedChar, %d : $CShort, %e : $CUnsignedShort, %f : $CInt, %g : $CUnsignedInt):
  %h = function_ref @chareth : $@convention(c) (CChar) -> CChar
  %i = apply %h(%a) : $@convention(c) (CChar) -> CChar

  %j = function_ref @signedChareth : $@convention(c) (CSignedChar) -> CSignedChar
  %k = apply %j(%b) : $@convention(c) (CSignedChar) -> CSignedChar

  %l = function_ref @unsignedChareth : $@convention(c) (CUnsignedChar) -> CUnsignedChar
  %m = apply %l(%c) : $@convention(c) (CUnsignedChar) -> CUnsignedChar

  %n = function_ref @eatMyShorts : $@convention(c) (CShort) -> CShort
  %o = apply %n(%d) : $@convention(c) (CShort) -> CShort

  %p = function_ref @eatMyUnsignedShorts : $@convention(c) (CUnsignedShort) -> CUnsignedShort
  %q = apply %p(%e) : $@convention(c) (CUnsignedShort) -> CUnsignedShort

  %r = function_ref @ints : $@convention(c) (CInt) -> CInt
  %s = apply %r(%f) : $@convention(c) (CInt) -> CInt

  %t = function_ref @unsigneds : $@convention(c) (CUnsignedInt) -> CUnsignedInt
  %u = apply %t(%g) : $@convention(c) (CUnsignedInt) -> CUnsignedInt

  return undef : $()
}

// CHECK-x86_64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i8 @testIntegerExtensionInBlock(%objc_block*, i8)
sil @testIntegerExtensionInBlock : $@convention(thin) (@owned @convention(block) (CChar) -> CChar, CChar) -> CChar {
entry(%b : $@convention(block) (CChar) -> CChar, %c : $CChar):
// CHECK-x86_64: call signext i8 {{%.*}}(%objc_block* {{%.*}}, i8 signext {{%.*}})
  %r = apply %b(%c) : $@convention(block) (CChar) -> CChar
  return %r : $CChar
}

// CHECK-x86_64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testBitfieldInBlock
// CHECK-x86_64:         call void {{%.*}}(%TSo11BitfieldOneV* noalias nocapture sret {{%.*}}, %objc_block* {{%.*}}, %TSo11BitfieldOneV* byval align 8 {{%.*}})
sil @testBitfieldInBlock : $@convention(thin) (@owned @convention(block) (BitfieldOne) -> BitfieldOne, BitfieldOne) -> BitfieldOne  {
entry(%b : $@convention(block) (BitfieldOne) -> BitfieldOne, %x : $BitfieldOne):
  %r = apply %b(%x) : $@convention(block) (BitfieldOne) -> BitfieldOne
  return %r : $BitfieldOne
}

sil public_external @chareth : $@convention(c) (CChar) -> CChar
sil public_external @signedChareth : $@convention(c) (CSignedChar) -> CSignedChar
sil public_external @unsignedChareth : $@convention(c) (CUnsignedChar) -> CUnsignedChar
sil public_external @eatMyShorts : $@convention(c) (CShort) -> CShort
sil public_external @eatMyUnsignedShorts : $@convention(c) (CUnsignedShort) -> CUnsignedShort
sil public_external @ints : $@convention(c) (CInt) -> CInt
sil public_external @unsigneds : $@convention(c) (CUnsignedInt) -> CUnsignedInt

