Subzero: Clean up the runtime implementation.

The runtime helpers are given more consistent names:
  __Sz_<bitcode>_<type1>_<type2>

Missing helpers (various vector bitcasts) are implemented.

We'd prefer to avoid calling external library functions, e.g. in compiler-rt, but even llc uses these helpers for some bitcode on x86-32, so the alternative is to copy their implementation into Subzero's runtime.

BUG= none
R=mtrofin@chromium.org

Review URL: https://codereview.chromium.org/961413002
diff --git a/tests_lit/llvm2ice_tests/fp.pnacl.ll b/tests_lit/llvm2ice_tests/fp.pnacl.ll
index ad898af..b8568a6 100644
--- a/tests_lit/llvm2ice_tests/fp.pnacl.ll
+++ b/tests_lit/llvm2ice_tests/fp.pnacl.ll
@@ -207,7 +207,7 @@
   ret i64 %conv
 }
 ; CHECK-LABEL: doubleToSigned64
-; CHECK: call {{.*}} R_{{.*}} cvtdtosi64
+; CHECK: call {{.*}} R_{{.*}} __Sz_fptosi_f64_i64
 
 define internal i64 @floatToSigned64(float %a) {
 entry:
@@ -215,7 +215,7 @@
   ret i64 %conv
 }
 ; CHECK-LABEL: floatToSigned64
-; CHECK: call {{.*}} R_{{.*}} cvtftosi64
+; CHECK: call {{.*}} R_{{.*}} __Sz_fptosi_f32_i64
 
 define internal i64 @doubleToUnsigned64(double %a) {
 entry:
@@ -223,7 +223,7 @@
   ret i64 %conv
 }
 ; CHECK-LABEL: doubleToUnsigned64
-; CHECK: call {{.*}} R_{{.*}} cvtdtoui64
+; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f64_i64
 
 define internal i64 @floatToUnsigned64(float %a) {
 entry:
@@ -231,7 +231,7 @@
   ret i64 %conv
 }
 ; CHECK-LABEL: floatToUnsigned64
-; CHECK: call {{.*}} R_{{.*}} cvtftoui64
+; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f32_i64
 
 define internal i32 @doubleToSigned32(double %a) {
 entry:
@@ -263,7 +263,7 @@
   ret i32 %conv
 }
 ; CHECK-LABEL: doubleToUnsigned32
-; CHECK: call {{.*}} R_{{.*}} cvtdtoui32
+; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f64_i32
 
 define internal i32 @floatToUnsigned32(float %a) {
 entry:
@@ -271,7 +271,7 @@
   ret i32 %conv
 }
 ; CHECK-LABEL: floatToUnsigned32
-; CHECK: call {{.*}} R_{{.*}} cvtftoui32
+; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f32_i32
 
 define internal i32 @doubleToSigned16(double %a) {
 entry:
@@ -379,7 +379,7 @@
   ret double %conv
 }
 ; CHECK-LABEL: signed64ToDouble
-; CHECK: call {{.*}} R_{{.*}} cvtsi64tod
+; CHECK: call {{.*}} R_{{.*}} __Sz_sitofp_i64_f64
 ; CHECK: fstp QWORD
 
 define internal float @signed64ToFloat(i64 %a) {
@@ -388,7 +388,7 @@
   ret float %conv
 }
 ; CHECK-LABEL: signed64ToFloat
-; CHECK: call {{.*}} R_{{.*}} cvtsi64tof
+; CHECK: call {{.*}} R_{{.*}} __Sz_sitofp_i64_f32
 ; CHECK: fstp DWORD
 
 define internal double @unsigned64ToDouble(i64 %a) {
@@ -397,7 +397,7 @@
   ret double %conv
 }
 ; CHECK-LABEL: unsigned64ToDouble
-; CHECK: call {{.*}} R_{{.*}} cvtui64tod
+; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i64_f64
 ; CHECK: fstp
 
 define internal float @unsigned64ToFloat(i64 %a) {
@@ -406,7 +406,7 @@
   ret float %conv
 }
 ; CHECK-LABEL: unsigned64ToFloat
-; CHECK: call {{.*}} R_{{.*}} cvtui64tof
+; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i64_f32
 ; CHECK: fstp
 
 define internal double @unsigned64ToDoubleConst() {
@@ -417,7 +417,7 @@
 ; CHECK-LABEL: unsigned64ToDouble
 ; CHECK: mov DWORD PTR [esp+0x4],0xb3a
 ; CHECK: mov DWORD PTR [esp],0x73ce2ff2
-; CHECK: call {{.*}} R_{{.*}} cvtui64tod
+; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i64_f64
 ; CHECK: fstp
 
 define internal double @signed32ToDouble(i32 %a) {
@@ -453,7 +453,7 @@
   ret double %conv
 }
 ; CHECK-LABEL: unsigned32ToDouble
-; CHECK: call {{.*}} R_{{.*}} cvtui32tod
+; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i32_f64
 ; CHECK: fstp QWORD
 
 define internal float @unsigned32ToFloat(i32 %a) {
@@ -462,7 +462,7 @@
   ret float %conv
 }
 ; CHECK-LABEL: unsigned32ToFloat
-; CHECK: call {{.*}} R_{{.*}} cvtui32tof
+; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i32_f32
 ; CHECK: fstp DWORD
 
 define internal double @signed16ToDouble(i32 %a) {