1 ; Test handling of constants in function blocks. 2 3 ; RUN: %p2i -i %s --insts | FileCheck %s 4 ; RUN: %p2i -i %s --args -notranslate -timing | \ 5 ; RUN: FileCheck --check-prefix=NOIR %s 6 7 define internal void @TestIntegers() { 8 entry: 9 ; CHECK: entry: 10 11 ; Test various sized integers 12 %v0 = or i1 true, false 13 ; CHECK-NEXT: %v0 = or i1 true, false 14 15 %v1 = add i8 0, 0 16 ; CHECK-NEXT: %v1 = add i8 0, 0 17 18 %v2 = add i8 5, 0 19 ; CHECK-NEXT: %v2 = add i8 5, 0 20 21 %v3 = add i8 -5, 0 22 ; CHECK-NEXT: %v3 = add i8 -5, 0 23 24 %v4 = and i16 10, 0 25 ; CHECK-NEXT: %v4 = and i16 10, 0 26 27 %v5 = add i16 -10, 0 28 ; CHECK-NEXT: %v5 = add i16 -10, 0 29 30 %v6 = add i32 20, 0 31 ; CHECK-NEXT: %v6 = add i32 20, 0 32 33 %v7 = add i32 -20, 0 34 ; CHECK-NEXT: %v7 = add i32 -20, 0 35 36 %v8 = add i64 30, 0 37 ; CHECK-NEXT: %v8 = add i64 30, 0 38 39 %v9 = add i64 -30, 0 40 ; CHECK-NEXT: %v9 = add i64 -30, 0 41 42 ; Test undefined integer values. 43 %v10 = xor i1 undef, false 44 ; CHECK-NEXT: %v10 = xor i1 undef, false 45 46 %v11 = add i8 undef, 0 47 ; CHECK-NEXT: %v11 = add i8 undef, 0 48 49 %v12 = add i16 undef, 0 50 ; CHECK-NEXT: %v12 = add i16 undef, 0 51 52 %v13 = add i32 undef, 0 53 ; CHECK-NEXT: %v13 = add i32 undef, 0 54 55 %v14 = add i64 undef, 0 56 ; CHECK-NEXT: %v14 = add i64 undef, 0 57 58 ret void 59 ; CHECK-NEXT: ret void 60 61 } 62 63 define internal void @TestFloats() { 64 entry: 65 ; CHECK: entry: 66 67 ; Test float and double constants 68 %v0 = fadd float 1.0, 0.0 69 ; CHECK-NEXT: %v0 = fadd float 1.000000e+00, 0.000000e+00 70 71 %v1 = fadd double 1.0, 0.0 72 ; CHECK-NEXT: %v1 = fadd double 1.000000e+00, 0.000000e+00 73 74 %v2 = fsub float 7.000000e+00, 8.000000e+00 75 ; CHECK-NEXT: %v2 = fsub float 7.000000e+00, 8.000000e+00 76 77 %v3 = fsub double 5.000000e+00, 6.000000e+00 78 ; CHECK-NEXT: %v3 = fsub double 5.000000e+00, 6.000000e+00 79 80 ; Test undefined float and double. 81 %v4 = fadd float undef, 0.0 82 ; CHECK-NEXT: %v4 = fadd float undef, 0.000000e+00 83 84 %v5 = fsub double undef, 6.000000e+00 85 ; CHECK-NEXT: %v5 = fsub double undef, 6.000000e+00 86 87 ; Test special floating point constants. Note: LLVM assembly appears 88 ; to use 64-bit integer constants for both float and double. 89 90 ; Generated from NAN in <math.h> 91 %v6 = fadd float 0x7FF8000000000000, 0.0 92 ; CHECK-NEXT: %v6 = fadd float nan, 0.000000e+00 93 94 ; Generated from -NAN in <math.h> 95 %v7 = fadd float 0xFFF8000000000000, 0.0 96 ; CHECK-NEXT: %v7 = fadd float -nan, 0.000000e+00 97 98 ; Generated from INFINITY in <math.h> 99 %v8 = fadd float 0x7FF0000000000000, 0.0 100 ; CHECK-NEXT: %v8 = fadd float inf, 0.000000e+00 101 102 ; Generated from -INFINITY in <math.h> 103 %v9 = fadd float 0xFFF0000000000000, 0.0 104 ; CHECK-NEXT: %v9 = fadd float -inf, 0.000000e+00 105 106 ; Generated from FLT_MIN in <float.h> 107 %v10 = fadd float 0x381000000000000000, 0.0 108 ; CHECK-NEXT: %v10 = fadd float 0.000000e+00, 0.000000e+00 109 110 ; Generated from -FLT_MIN in <float.h> 111 %v11 = fadd float 0xb81000000000000000, 0.0 112 ; CHECK-NEXT: %v11 = fadd float 0.000000e+00, 0.000000e+00 113 114 ; Generated from FLT_MAX in <float.h> 115 %v12 = fadd float 340282346638528859811704183484516925440.000000, 0.0 116 ; CHECK-NEXT: %v12 = fadd float 3.402823e+38, 0.000000e+00 117 118 ; Generated from -FLT_MAX in <float.h> 119 %v13 = fadd float -340282346638528859811704183484516925440.000000, 0.0 120 ; CHECK-NEXT: %v13 = fadd float -3.402823e+38, 0.000000e+00 121 122 ; Generated from NAN in <math.h> 123 %v14 = fadd double 0x7FF8000000000000, 0.0 124 ; CHECK-NEXT: %v14 = fadd double nan, 0.000000e+00 125 126 ; Generated from -NAN in <math.h> 127 %v15 = fadd double 0xFFF8000000000000, 0.0 128 ; CHECK-NEXT: %v15 = fadd double -nan, 0.000000e+00 129 130 ; Generated from INFINITY in <math.h> 131 %v16 = fadd double 0x7FF0000000000000, 0.0 132 ; CHECK-NEXT: %v16 = fadd double inf, 0.000000e+00 133 134 ; Generated from -INFINITY in <math.h> 135 %v17 = fadd double 0xFFF0000000000000, 0.0 136 ; CHECK-NEXT: %v17 = fadd double -inf, 0.000000e+00 137 138 ; Generated from DBL_MIN in <float.h> 139 %v18 = fadd double 0x0010000000000000, 0.0 140 ; CHECK-NEXT: %v18 = fadd double 2.225074e-308, 0.000000e+00 141 142 ; Generated from -DBL_MIN in <float.h> 143 %v19 = fadd double 0x8010000000000000, 0.0 144 ; CHECK-NEXT: %v19 = fadd double -2.225074e-308, 0.000000e+00 145 146 ; Generated from DBL_MAX in <float.h> 147 %v20 = fadd double 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000, 0.0 148 ; CHECK-NEXT: %v20 = fadd double 1.797693e+308, 0.000000e+00 149 150 ; Generated from -DBL_MAX in <float.h> 151 %v21 = fadd double -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000, 0.0 152 ; CHECK-NEXT: %v21 = fadd double -1.797693e+308, 0.000000e+00 153 154 ret void 155 ; CHECK-NEXT: ret void 156 } 157 158 ; NOIR: Total across all functions 159