Initial skeleton of Subzero.

This includes just enough code to build the high-level ICE IR and dump it back out again.  There is a script szdiff.py that does a fuzzy diff of the input and output for verification.  See the comment in szdiff.py for a description of the fuzziness.

Building llvm2ice requires LLVM headers, libs, and tools (e.g. FileCheck) to be present.  These default to something like llvm_i686_linux_work/Release+Asserts/ based on the checked-out and built pnacl-llvm code; I'll try to figure out how to more automatically detect the build configuration.

"make check" runs the lit tests.

This CL has under 2000 lines of "interesting" Ice*.{h,cpp} code, plus 600 lines of llvm2ice.cpp driver code, and the rest is tests.

Here is the high-level mapping of source files to functionality:

IceDefs.h, IceTypes.h, IceTypes.cpp:
Commonly used types and utilities.

IceCfg.h, IceCfg.cpp:
Operations at the function level.

IceCfgNode.h, IceCfgNode.cpp:
Operations on basic blocks (nodes).

IceInst.h, IceInst.cpp:
Operations on instructions.

IceOperand.h, IceOperand.cpp:
Operations on operands, such as stack locations, physical registers, and constants.

BUG= none
R=jfb@chromium.org

Review URL: https://codereview.chromium.org/205613002
diff --git a/tests_lit/llvm2ice_tests/fpconst.pnacl.ll b/tests_lit/llvm2ice_tests/fpconst.pnacl.ll
new file mode 100644
index 0000000..eb43c8e
--- /dev/null
+++ b/tests_lit/llvm2ice_tests/fpconst.pnacl.ll
@@ -0,0 +1,535 @@
+; RUN: %szdiff --llvm2ice=%llvm2ice %s | FileCheck --check-prefix=DUMP %s
+
+; This is a smoke test for floating-point constant pooling.  It tests
+; pooling of various float and double constants (including positive
+; and negative NaN) within functions and across functions.  Note that
+; in LLVM bitcode, hex constants are used for an FP constant whenever
+; the constant "cannot be represented as a decimal floating point
+; number in a reasonable number of digits".  See
+; http://llvm.org/docs/LangRef.html#simple-constants .
+
+@__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
+@__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
+@__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
+@__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
+
+define internal float @FpLookup1(i32 %Arg) {
+entry:
+  switch i32 %Arg, label %return [
+    i32 0, label %sw.bb
+    i32 1, label %sw.bb1
+    i32 2, label %sw.bb4
+    i32 3, label %sw.bb7
+    i32 -1, label %sw.bb10
+    i32 -2, label %sw.bb14
+    i32 -3, label %sw.bb19
+    i32 10, label %sw.bb24
+    i32 -10, label %sw.bb27
+    i32 100, label %sw.bb30
+    i32 101, label %sw.bb33
+    i32 102, label %sw.bb36
+    i32 103, label %sw.bb39
+    i32 -101, label %sw.bb42
+    i32 -102, label %sw.bb47
+    i32 -103, label %sw.bb52
+    i32 110, label %sw.bb57
+    i32 -110, label %sw.bb60
+  ]
+
+sw.bb:                                            ; preds = %entry
+  %call = call float @Dummy(i32 0)
+  %add = fadd float %call, 1.000000e+00
+  br label %return
+
+sw.bb1:                                           ; preds = %entry
+  %call2 = call float @Dummy(i32 1)
+  %add3 = fadd float %call2, 2.000000e+00
+  br label %return
+
+sw.bb4:                                           ; preds = %entry
+  %call5 = call float @Dummy(i32 2)
+  %add6 = fadd float %call5, 4.000000e+00
+  br label %return
+
+sw.bb7:                                           ; preds = %entry
+  %call8 = call float @Dummy(i32 3)
+  %add9 = fadd float %call8, 8.000000e+00
+  br label %return
+
+sw.bb10:                                          ; preds = %entry
+  %call11 = call float @Dummy(i32 -1)
+  %conv13 = fadd float %call11, 5.000000e-01
+  br label %return
+
+sw.bb14:                                          ; preds = %entry
+  %call15 = call float @Dummy(i32 -2)
+  %conv16 = fpext float %call15 to double
+  %add17 = fadd double %conv16, 0x3FD5555555555555
+  %conv18 = fptrunc double %add17 to float
+  br label %return
+
+sw.bb19:                                          ; preds = %entry
+  %call20 = call float @Dummy(i32 -3)
+  %conv23 = fadd float %call20, 2.500000e-01
+  br label %return
+
+sw.bb24:                                          ; preds = %entry
+  %call25 = call float @Dummy(i32 10)
+  %add26 = fadd float %call25, 0x7FF8000000000000
+  br label %return
+
+sw.bb27:                                          ; preds = %entry
+  %call28 = call float @Dummy(i32 -10)
+  %add29 = fadd float %call28, 0xFFF8000000000000
+  br label %return
+
+sw.bb30:                                          ; preds = %entry
+  %call31 = call float @Dummy(i32 100)
+  %add32 = fadd float %call31, 1.000000e+00
+  br label %return
+
+sw.bb33:                                          ; preds = %entry
+  %call34 = call float @Dummy(i32 101)
+  %add35 = fadd float %call34, 2.000000e+00
+  br label %return
+
+sw.bb36:                                          ; preds = %entry
+  %call37 = call float @Dummy(i32 102)
+  %add38 = fadd float %call37, 4.000000e+00
+  br label %return
+
+sw.bb39:                                          ; preds = %entry
+  %call40 = call float @Dummy(i32 103)
+  %add41 = fadd float %call40, 8.000000e+00
+  br label %return
+
+sw.bb42:                                          ; preds = %entry
+  %call43 = call float @Dummy(i32 -101)
+  %conv46 = fadd float %call43, 5.000000e-01
+  br label %return
+
+sw.bb47:                                          ; preds = %entry
+  %call48 = call float @Dummy(i32 -102)
+  %conv49 = fpext float %call48 to double
+  %add50 = fadd double %conv49, 0x3FD5555555555555
+  %conv51 = fptrunc double %add50 to float
+  br label %return
+
+sw.bb52:                                          ; preds = %entry
+  %call53 = call float @Dummy(i32 -103)
+  %conv56 = fadd float %call53, 2.500000e-01
+  br label %return
+
+sw.bb57:                                          ; preds = %entry
+  %call58 = call float @Dummy(i32 110)
+  %add59 = fadd float %call58, 0x7FF8000000000000
+  br label %return
+
+sw.bb60:                                          ; preds = %entry
+  %call61 = call float @Dummy(i32 -110)
+  %add62 = fadd float %call61, 0xFFF8000000000000
+  br label %return
+
+return:                                           ; preds = %entry, %sw.bb60, %sw.bb57, %sw.bb52, %sw.bb47, %sw.bb42, %sw.bb39, %sw.bb36, %sw.bb33, %sw.bb30, %sw.bb27, %sw.bb24, %sw.bb19, %sw.bb14, %sw.bb10, %sw.bb7, %sw.bb4, %sw.bb1, %sw.bb
+  %retval.0 = phi float [ %add62, %sw.bb60 ], [ %add59, %sw.bb57 ], [ %conv56, %sw.bb52 ], [ %conv51, %sw.bb47 ], [ %conv46, %sw.bb42 ], [ %add41, %sw.bb39 ], [ %add38, %sw.bb36 ], [ %add35, %sw.bb33 ], [ %add32, %sw.bb30 ], [ %add29, %sw.bb27 ], [ %add26, %sw.bb24 ], [ %conv23, %sw.bb19 ], [ %conv18, %sw.bb14 ], [ %conv13, %sw.bb10 ], [ %add9, %sw.bb7 ], [ %add6, %sw.bb4 ], [ %add3, %sw.bb1 ], [ %add, %sw.bb ], [ 0.000000e+00, %entry ]
+  ret float %retval.0
+}
+
+declare float @Dummy(i32)
+
+define internal float @FpLookup2(i32 %Arg) {
+entry:
+  switch i32 %Arg, label %return [
+    i32 0, label %sw.bb
+    i32 1, label %sw.bb1
+    i32 2, label %sw.bb4
+    i32 3, label %sw.bb7
+    i32 -1, label %sw.bb10
+    i32 -2, label %sw.bb14
+    i32 -3, label %sw.bb19
+    i32 10, label %sw.bb24
+    i32 -10, label %sw.bb27
+    i32 100, label %sw.bb30
+    i32 101, label %sw.bb33
+    i32 102, label %sw.bb36
+    i32 103, label %sw.bb39
+    i32 -101, label %sw.bb42
+    i32 -102, label %sw.bb47
+    i32 -103, label %sw.bb52
+    i32 110, label %sw.bb57
+    i32 -110, label %sw.bb60
+  ]
+
+sw.bb:                                            ; preds = %entry
+  %call = call float @Dummy(i32 0)
+  %add = fadd float %call, 1.000000e+00
+  br label %return
+
+sw.bb1:                                           ; preds = %entry
+  %call2 = call float @Dummy(i32 1)
+  %add3 = fadd float %call2, 2.000000e+00
+  br label %return
+
+sw.bb4:                                           ; preds = %entry
+  %call5 = call float @Dummy(i32 2)
+  %add6 = fadd float %call5, 4.000000e+00
+  br label %return
+
+sw.bb7:                                           ; preds = %entry
+  %call8 = call float @Dummy(i32 3)
+  %add9 = fadd float %call8, 8.000000e+00
+  br label %return
+
+sw.bb10:                                          ; preds = %entry
+  %call11 = call float @Dummy(i32 -1)
+  %conv13 = fadd float %call11, 5.000000e-01
+  br label %return
+
+sw.bb14:                                          ; preds = %entry
+  %call15 = call float @Dummy(i32 -2)
+  %conv16 = fpext float %call15 to double
+  %add17 = fadd double %conv16, 0x3FD5555555555555
+  %conv18 = fptrunc double %add17 to float
+  br label %return
+
+sw.bb19:                                          ; preds = %entry
+  %call20 = call float @Dummy(i32 -3)
+  %conv23 = fadd float %call20, 2.500000e-01
+  br label %return
+
+sw.bb24:                                          ; preds = %entry
+  %call25 = call float @Dummy(i32 10)
+  %add26 = fadd float %call25, 0x7FF8000000000000
+  br label %return
+
+sw.bb27:                                          ; preds = %entry
+  %call28 = call float @Dummy(i32 -10)
+  %add29 = fadd float %call28, 0xFFF8000000000000
+  br label %return
+
+sw.bb30:                                          ; preds = %entry
+  %call31 = call float @Dummy(i32 100)
+  %add32 = fadd float %call31, 1.000000e+00
+  br label %return
+
+sw.bb33:                                          ; preds = %entry
+  %call34 = call float @Dummy(i32 101)
+  %add35 = fadd float %call34, 2.000000e+00
+  br label %return
+
+sw.bb36:                                          ; preds = %entry
+  %call37 = call float @Dummy(i32 102)
+  %add38 = fadd float %call37, 4.000000e+00
+  br label %return
+
+sw.bb39:                                          ; preds = %entry
+  %call40 = call float @Dummy(i32 103)
+  %add41 = fadd float %call40, 8.000000e+00
+  br label %return
+
+sw.bb42:                                          ; preds = %entry
+  %call43 = call float @Dummy(i32 -101)
+  %conv46 = fadd float %call43, 5.000000e-01
+  br label %return
+
+sw.bb47:                                          ; preds = %entry
+  %call48 = call float @Dummy(i32 -102)
+  %conv49 = fpext float %call48 to double
+  %add50 = fadd double %conv49, 0x3FD5555555555555
+  %conv51 = fptrunc double %add50 to float
+  br label %return
+
+sw.bb52:                                          ; preds = %entry
+  %call53 = call float @Dummy(i32 -103)
+  %conv56 = fadd float %call53, 2.500000e-01
+  br label %return
+
+sw.bb57:                                          ; preds = %entry
+  %call58 = call float @Dummy(i32 110)
+  %add59 = fadd float %call58, 0x7FF8000000000000
+  br label %return
+
+sw.bb60:                                          ; preds = %entry
+  %call61 = call float @Dummy(i32 -110)
+  %add62 = fadd float %call61, 0xFFF8000000000000
+  br label %return
+
+return:                                           ; preds = %entry, %sw.bb60, %sw.bb57, %sw.bb52, %sw.bb47, %sw.bb42, %sw.bb39, %sw.bb36, %sw.bb33, %sw.bb30, %sw.bb27, %sw.bb24, %sw.bb19, %sw.bb14, %sw.bb10, %sw.bb7, %sw.bb4, %sw.bb1, %sw.bb
+  %retval.0 = phi float [ %add62, %sw.bb60 ], [ %add59, %sw.bb57 ], [ %conv56, %sw.bb52 ], [ %conv51, %sw.bb47 ], [ %conv46, %sw.bb42 ], [ %add41, %sw.bb39 ], [ %add38, %sw.bb36 ], [ %add35, %sw.bb33 ], [ %add32, %sw.bb30 ], [ %add29, %sw.bb27 ], [ %add26, %sw.bb24 ], [ %conv23, %sw.bb19 ], [ %conv18, %sw.bb14 ], [ %conv13, %sw.bb10 ], [ %add9, %sw.bb7 ], [ %add6, %sw.bb4 ], [ %add3, %sw.bb1 ], [ %add, %sw.bb ], [ 0.000000e+00, %entry ]
+  ret float %retval.0
+}
+
+define internal double @FpLookup3(i32 %Arg) {
+entry:
+  switch i32 %Arg, label %return [
+    i32 0, label %sw.bb
+    i32 1, label %sw.bb1
+    i32 2, label %sw.bb5
+    i32 3, label %sw.bb9
+    i32 -1, label %sw.bb13
+    i32 -2, label %sw.bb17
+    i32 -3, label %sw.bb21
+    i32 10, label %sw.bb25
+    i32 -10, label %sw.bb29
+    i32 100, label %sw.bb33
+    i32 101, label %sw.bb37
+    i32 102, label %sw.bb41
+    i32 103, label %sw.bb45
+    i32 -101, label %sw.bb49
+    i32 -102, label %sw.bb53
+    i32 -103, label %sw.bb57
+    i32 110, label %sw.bb61
+    i32 -110, label %sw.bb65
+  ]
+
+sw.bb:                                            ; preds = %entry
+  %call = call float @Dummy(i32 0)
+  %add = fadd float %call, 1.000000e+00
+  %conv = fpext float %add to double
+  br label %return
+
+sw.bb1:                                           ; preds = %entry
+  %call2 = call float @Dummy(i32 1)
+  %add3 = fadd float %call2, 2.000000e+00
+  %conv4 = fpext float %add3 to double
+  br label %return
+
+sw.bb5:                                           ; preds = %entry
+  %call6 = call float @Dummy(i32 2)
+  %add7 = fadd float %call6, 4.000000e+00
+  %conv8 = fpext float %add7 to double
+  br label %return
+
+sw.bb9:                                           ; preds = %entry
+  %call10 = call float @Dummy(i32 3)
+  %add11 = fadd float %call10, 8.000000e+00
+  %conv12 = fpext float %add11 to double
+  br label %return
+
+sw.bb13:                                          ; preds = %entry
+  %call14 = call float @Dummy(i32 -1)
+  %conv15 = fpext float %call14 to double
+  %add16 = fadd double %conv15, 5.000000e-01
+  br label %return
+
+sw.bb17:                                          ; preds = %entry
+  %call18 = call float @Dummy(i32 -2)
+  %conv19 = fpext float %call18 to double
+  %add20 = fadd double %conv19, 0x3FD5555555555555
+  br label %return
+
+sw.bb21:                                          ; preds = %entry
+  %call22 = call float @Dummy(i32 -3)
+  %conv23 = fpext float %call22 to double
+  %add24 = fadd double %conv23, 2.500000e-01
+  br label %return
+
+sw.bb25:                                          ; preds = %entry
+  %call26 = call float @Dummy(i32 10)
+  %conv27 = fpext float %call26 to double
+  %add28 = fadd double %conv27, 0x7FF8000000000000
+  br label %return
+
+sw.bb29:                                          ; preds = %entry
+  %call30 = call float @Dummy(i32 -10)
+  %conv31 = fpext float %call30 to double
+  %add32 = fadd double %conv31, 0xFFF8000000000000
+  br label %return
+
+sw.bb33:                                          ; preds = %entry
+  %call34 = call float @Dummy(i32 100)
+  %add35 = fadd float %call34, 1.000000e+00
+  %conv36 = fpext float %add35 to double
+  br label %return
+
+sw.bb37:                                          ; preds = %entry
+  %call38 = call float @Dummy(i32 101)
+  %add39 = fadd float %call38, 2.000000e+00
+  %conv40 = fpext float %add39 to double
+  br label %return
+
+sw.bb41:                                          ; preds = %entry
+  %call42 = call float @Dummy(i32 102)
+  %add43 = fadd float %call42, 4.000000e+00
+  %conv44 = fpext float %add43 to double
+  br label %return
+
+sw.bb45:                                          ; preds = %entry
+  %call46 = call float @Dummy(i32 103)
+  %add47 = fadd float %call46, 8.000000e+00
+  %conv48 = fpext float %add47 to double
+  br label %return
+
+sw.bb49:                                          ; preds = %entry
+  %call50 = call float @Dummy(i32 -101)
+  %conv51 = fpext float %call50 to double
+  %add52 = fadd double %conv51, 5.000000e-01
+  br label %return
+
+sw.bb53:                                          ; preds = %entry
+  %call54 = call float @Dummy(i32 -102)
+  %conv55 = fpext float %call54 to double
+  %add56 = fadd double %conv55, 0x3FD5555555555555
+  br label %return
+
+sw.bb57:                                          ; preds = %entry
+  %call58 = call float @Dummy(i32 -103)
+  %conv59 = fpext float %call58 to double
+  %add60 = fadd double %conv59, 2.500000e-01
+  br label %return
+
+sw.bb61:                                          ; preds = %entry
+  %call62 = call float @Dummy(i32 110)
+  %conv63 = fpext float %call62 to double
+  %add64 = fadd double %conv63, 0x7FF8000000000000
+  br label %return
+
+sw.bb65:                                          ; preds = %entry
+  %call66 = call float @Dummy(i32 -110)
+  %conv67 = fpext float %call66 to double
+  %add68 = fadd double %conv67, 0xFFF8000000000000
+  br label %return
+
+return:                                           ; preds = %entry, %sw.bb65, %sw.bb61, %sw.bb57, %sw.bb53, %sw.bb49, %sw.bb45, %sw.bb41, %sw.bb37, %sw.bb33, %sw.bb29, %sw.bb25, %sw.bb21, %sw.bb17, %sw.bb13, %sw.bb9, %sw.bb5, %sw.bb1, %sw.bb
+  %retval.0 = phi double [ %add68, %sw.bb65 ], [ %add64, %sw.bb61 ], [ %add60, %sw.bb57 ], [ %add56, %sw.bb53 ], [ %add52, %sw.bb49 ], [ %conv48, %sw.bb45 ], [ %conv44, %sw.bb41 ], [ %conv40, %sw.bb37 ], [ %conv36, %sw.bb33 ], [ %add32, %sw.bb29 ], [ %add28, %sw.bb25 ], [ %add24, %sw.bb21 ], [ %add20, %sw.bb17 ], [ %add16, %sw.bb13 ], [ %conv12, %sw.bb9 ], [ %conv8, %sw.bb5 ], [ %conv4, %sw.bb1 ], [ %conv, %sw.bb ], [ 0.000000e+00, %entry ]
+  ret double %retval.0
+}
+
+define internal double @FpLookup4(i32 %Arg) {
+entry:
+  switch i32 %Arg, label %return [
+    i32 0, label %sw.bb
+    i32 1, label %sw.bb1
+    i32 2, label %sw.bb5
+    i32 3, label %sw.bb9
+    i32 -1, label %sw.bb13
+    i32 -2, label %sw.bb17
+    i32 -3, label %sw.bb21
+    i32 10, label %sw.bb25
+    i32 -10, label %sw.bb29
+    i32 100, label %sw.bb33
+    i32 101, label %sw.bb37
+    i32 102, label %sw.bb41
+    i32 103, label %sw.bb45
+    i32 -101, label %sw.bb49
+    i32 -102, label %sw.bb53
+    i32 -103, label %sw.bb57
+    i32 110, label %sw.bb61
+    i32 -110, label %sw.bb65
+  ]
+
+sw.bb:                                            ; preds = %entry
+  %call = call float @Dummy(i32 0)
+  %add = fadd float %call, 1.000000e+00
+  %conv = fpext float %add to double
+  br label %return
+
+sw.bb1:                                           ; preds = %entry
+  %call2 = call float @Dummy(i32 1)
+  %add3 = fadd float %call2, 2.000000e+00
+  %conv4 = fpext float %add3 to double
+  br label %return
+
+sw.bb5:                                           ; preds = %entry
+  %call6 = call float @Dummy(i32 2)
+  %add7 = fadd float %call6, 4.000000e+00
+  %conv8 = fpext float %add7 to double
+  br label %return
+
+sw.bb9:                                           ; preds = %entry
+  %call10 = call float @Dummy(i32 3)
+  %add11 = fadd float %call10, 8.000000e+00
+  %conv12 = fpext float %add11 to double
+  br label %return
+
+sw.bb13:                                          ; preds = %entry
+  %call14 = call float @Dummy(i32 -1)
+  %conv15 = fpext float %call14 to double
+  %add16 = fadd double %conv15, 5.000000e-01
+  br label %return
+
+sw.bb17:                                          ; preds = %entry
+  %call18 = call float @Dummy(i32 -2)
+  %conv19 = fpext float %call18 to double
+  %add20 = fadd double %conv19, 0x3FD5555555555555
+  br label %return
+
+sw.bb21:                                          ; preds = %entry
+  %call22 = call float @Dummy(i32 -3)
+  %conv23 = fpext float %call22 to double
+  %add24 = fadd double %conv23, 2.500000e-01
+  br label %return
+
+sw.bb25:                                          ; preds = %entry
+  %call26 = call float @Dummy(i32 10)
+  %conv27 = fpext float %call26 to double
+  %add28 = fadd double %conv27, 0x7FF8000000000000
+  br label %return
+
+sw.bb29:                                          ; preds = %entry
+  %call30 = call float @Dummy(i32 -10)
+  %conv31 = fpext float %call30 to double
+  %add32 = fadd double %conv31, 0xFFF8000000000000
+  br label %return
+
+sw.bb33:                                          ; preds = %entry
+  %call34 = call float @Dummy(i32 100)
+  %add35 = fadd float %call34, 1.000000e+00
+  %conv36 = fpext float %add35 to double
+  br label %return
+
+sw.bb37:                                          ; preds = %entry
+  %call38 = call float @Dummy(i32 101)
+  %add39 = fadd float %call38, 2.000000e+00
+  %conv40 = fpext float %add39 to double
+  br label %return
+
+sw.bb41:                                          ; preds = %entry
+  %call42 = call float @Dummy(i32 102)
+  %add43 = fadd float %call42, 4.000000e+00
+  %conv44 = fpext float %add43 to double
+  br label %return
+
+sw.bb45:                                          ; preds = %entry
+  %call46 = call float @Dummy(i32 103)
+  %add47 = fadd float %call46, 8.000000e+00
+  %conv48 = fpext float %add47 to double
+  br label %return
+
+sw.bb49:                                          ; preds = %entry
+  %call50 = call float @Dummy(i32 -101)
+  %conv51 = fpext float %call50 to double
+  %add52 = fadd double %conv51, 5.000000e-01
+  br label %return
+
+sw.bb53:                                          ; preds = %entry
+  %call54 = call float @Dummy(i32 -102)
+  %conv55 = fpext float %call54 to double
+  %add56 = fadd double %conv55, 0x3FD5555555555555
+  br label %return
+
+sw.bb57:                                          ; preds = %entry
+  %call58 = call float @Dummy(i32 -103)
+  %conv59 = fpext float %call58 to double
+  %add60 = fadd double %conv59, 2.500000e-01
+  br label %return
+
+sw.bb61:                                          ; preds = %entry
+  %call62 = call float @Dummy(i32 110)
+  %conv63 = fpext float %call62 to double
+  %add64 = fadd double %conv63, 0x7FF8000000000000
+  br label %return
+
+sw.bb65:                                          ; preds = %entry
+  %call66 = call float @Dummy(i32 -110)
+  %conv67 = fpext float %call66 to double
+  %add68 = fadd double %conv67, 0xFFF8000000000000
+  br label %return
+
+return:                                           ; preds = %entry, %sw.bb65, %sw.bb61, %sw.bb57, %sw.bb53, %sw.bb49, %sw.bb45, %sw.bb41, %sw.bb37, %sw.bb33, %sw.bb29, %sw.bb25, %sw.bb21, %sw.bb17, %sw.bb13, %sw.bb9, %sw.bb5, %sw.bb1, %sw.bb
+  %retval.0 = phi double [ %add68, %sw.bb65 ], [ %add64, %sw.bb61 ], [ %add60, %sw.bb57 ], [ %add56, %sw.bb53 ], [ %add52, %sw.bb49 ], [ %conv48, %sw.bb45 ], [ %conv44, %sw.bb41 ], [ %conv40, %sw.bb37 ], [ %conv36, %sw.bb33 ], [ %add32, %sw.bb29 ], [ %add28, %sw.bb25 ], [ %add24, %sw.bb21 ], [ %add20, %sw.bb17 ], [ %add16, %sw.bb13 ], [ %conv12, %sw.bb9 ], [ %conv8, %sw.bb5 ], [ %conv4, %sw.bb1 ], [ %conv, %sw.bb ], [ 0.000000e+00, %entry ]
+  ret double %retval.0
+}
+
+; ERRORS-NOT: ICE translation error
+; DUMP-NOT: SZ