blob: 9748763959300f37027930835c98f838df079d20 [file] [log] [blame]
// RUN: %target-swift-frontend -emit-ir -parse-sil %s -module-name Swift -parse-stdlib | %FileCheck %s
// This file provides examples on how vector computations are written at the SIL
// level and how they are translated by IRGen to LLVM IR intrinsics.
import Builtin
// CHECK-LABEL: define{{( protected| dllexport)?}} swiftcc <4 x i32> @vector_int_add(<4 x i32> %0, <4 x i32> %1) {{.*}} {
// CHECK-NEXT: entry:
// CHECK-NEXT: %2 = add <4 x i32> %0, %1
// CHECK-NEXT: ret <4 x i32> %2
// CHECK-NEXT: }
sil @vector_int_add : $@convention(thin) (Builtin.Vec4xInt32, Builtin.Vec4xInt32) -> Builtin.Vec4xInt32 {
bb0(%0 : $Builtin.Vec4xInt32, %1 : $Builtin.Vec4xInt32):
%2 = builtin "add_Vec4xInt32" (%0 : $Builtin.Vec4xInt32, %1 : $Builtin.Vec4xInt32) : $Builtin.Vec4xInt32
return %2 : $Builtin.Vec4xInt32
}
// CHECK-LABEL: define{{( protected| dllexport)?}} swiftcc <4 x float> @vector_float_add(<4 x float> %0, <4 x float> %1) {{.*}} {
// CHECK-NEXT: entry:
// CHECK-NEXT: %2 = fadd <4 x float> %0, %1
// CHECK-NEXT: ret <4 x float> %2
// CHECK-NEXT: }
sil @vector_float_add : $@convention(thin) (Builtin.Vec4xFPIEEE32, Builtin.Vec4xFPIEEE32) -> Builtin.Vec4xFPIEEE32 {
bb0(%0 : $Builtin.Vec4xFPIEEE32, %1 : $Builtin.Vec4xFPIEEE32):
%2 = builtin "fadd_Vec4xFPIEEE32"(%0 : $Builtin.Vec4xFPIEEE32, %1 : $Builtin.Vec4xFPIEEE32) : $Builtin.Vec4xFPIEEE32
return %2 : $Builtin.Vec4xFPIEEE32
}