// 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 }