1 ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=ELF64 2 3 define void @t1a(float %a) uwtable ssp { 4 entry: 5 ; ELF64: t1a 6 %cmp = fcmp oeq float %a, 0.000000e+00 7 ; ELF64: addis 8 ; ELF64: lfs 9 ; ELF64: fcmpu 10 br i1 %cmp, label %if.then, label %if.end 11 12 if.then: ; preds = %entry 13 call void @foo() 14 br label %if.end 15 16 if.end: ; preds = %if.then, %entry 17 ret void 18 } 19 20 declare void @foo() 21 22 define void @t1b(float %a) uwtable ssp { 23 entry: 24 ; ELF64: t1b 25 %cmp = fcmp oeq float %a, -0.000000e+00 26 ; ELF64: addis 27 ; ELF64: lfs 28 ; ELF64: fcmpu 29 br i1 %cmp, label %if.then, label %if.end 30 31 if.then: ; preds = %entry 32 call void @foo() 33 br label %if.end 34 35 if.end: ; preds = %if.then, %entry 36 ret void 37 } 38 39 define void @t2a(double %a) uwtable ssp { 40 entry: 41 ; ELF64: t2a 42 %cmp = fcmp oeq double %a, 0.000000e+00 43 ; ELF64: addis 44 ; ELF64: lfd 45 ; ELF64: fcmpu 46 br i1 %cmp, label %if.then, label %if.end 47 48 if.then: ; preds = %entry 49 call void @foo() 50 br label %if.end 51 52 if.end: ; preds = %if.then, %entry 53 ret void 54 } 55 56 define void @t2b(double %a) uwtable ssp { 57 entry: 58 ; ELF64: t2b 59 %cmp = fcmp oeq double %a, -0.000000e+00 60 ; ELF64: addis 61 ; ELF64: lfd 62 ; ELF64: fcmpu 63 br i1 %cmp, label %if.then, label %if.end 64 65 if.then: ; preds = %entry 66 call void @foo() 67 br label %if.end 68 69 if.end: ; preds = %if.then, %entry 70 ret void 71 } 72 73 define void @t4(i8 signext %a) uwtable ssp { 74 entry: 75 ; ELF64: t4 76 %cmp = icmp eq i8 %a, -1 77 ; ELF64: extsb 78 ; ELF64: cmpwi 79 br i1 %cmp, label %if.then, label %if.end 80 81 if.then: ; preds = %entry 82 call void @foo() 83 br label %if.end 84 85 if.end: ; preds = %if.then, %entry 86 ret void 87 } 88 89 define void @t5(i8 zeroext %a) uwtable ssp { 90 entry: 91 ; ELF64: t5 92 %cmp = icmp eq i8 %a, 1 93 ; ELF64: extsb 94 ; ELF64: cmpwi 95 br i1 %cmp, label %if.then, label %if.end 96 97 if.then: ; preds = %entry 98 call void @foo() 99 br label %if.end 100 101 if.end: ; preds = %if.then, %entry 102 ret void 103 } 104 105 define void @t6(i16 signext %a) uwtable ssp { 106 entry: 107 ; ELF64: t6 108 %cmp = icmp eq i16 %a, -1 109 ; ELF64: extsh 110 ; ELF64: cmpwi 111 br i1 %cmp, label %if.then, label %if.end 112 113 if.then: ; preds = %entry 114 call void @foo() 115 br label %if.end 116 117 if.end: ; preds = %if.then, %entry 118 ret void 119 } 120 121 define void @t7(i16 zeroext %a) uwtable ssp { 122 entry: 123 ; ELF64: t7 124 %cmp = icmp eq i16 %a, 1 125 ; ELF64: extsh 126 ; ELF64: cmpwi 127 br i1 %cmp, label %if.then, label %if.end 128 129 if.then: ; preds = %entry 130 call void @foo() 131 br label %if.end 132 133 if.end: ; preds = %if.then, %entry 134 ret void 135 } 136 137 define void @t8(i32 %a) uwtable ssp { 138 entry: 139 ; ELF64: t8 140 %cmp = icmp eq i32 %a, -1 141 ; ELF64: cmpwi 142 br i1 %cmp, label %if.then, label %if.end 143 144 if.then: ; preds = %entry 145 call void @foo() 146 br label %if.end 147 148 if.end: ; preds = %if.then, %entry 149 ret void 150 } 151 152 define void @t9(i32 %a) uwtable ssp { 153 entry: 154 ; ELF64: t9 155 %cmp = icmp eq i32 %a, 1 156 ; ELF64: cmpwi 157 br i1 %cmp, label %if.then, label %if.end 158 159 if.then: ; preds = %entry 160 call void @foo() 161 br label %if.end 162 163 if.end: ; preds = %if.then, %entry 164 ret void 165 } 166 167 define void @t10(i32 %a) uwtable ssp { 168 entry: 169 ; ELF64: t10 170 %cmp = icmp eq i32 %a, 384 171 ; ELF64: cmpwi 172 br i1 %cmp, label %if.then, label %if.end 173 174 if.then: ; preds = %entry 175 call void @foo() 176 br label %if.end 177 178 if.end: ; preds = %if.then, %entry 179 ret void 180 } 181 182 define void @t11(i32 %a) uwtable ssp { 183 entry: 184 ; ELF64: t11 185 %cmp = icmp eq i32 %a, 4096 186 ; ELF64: cmpwi 187 br i1 %cmp, label %if.then, label %if.end 188 189 if.then: ; preds = %entry 190 call void @foo() 191 br label %if.end 192 193 if.end: ; preds = %if.then, %entry 194 ret void 195 } 196 197 define void @t12(i8 %a) uwtable ssp { 198 entry: 199 ; ELF64: t12 200 %cmp = icmp ugt i8 %a, -113 201 ; ELF64: rlwinm 202 ; ELF64: cmplwi 203 br i1 %cmp, label %if.then, label %if.end 204 205 if.then: ; preds = %entry 206 call void @foo() 207 br label %if.end 208 209 if.end: ; preds = %if.then, %entry 210 ret void 211 } 212 213 define void @t13() nounwind ssp { 214 entry: 215 ; ELF64: t13 216 %cmp = icmp slt i32 -123, -2147483648 217 ; ELF64: li 218 ; ELF64: lis 219 ; ELF64: cmpw 220 br i1 %cmp, label %if.then, label %if.end 221 222 if.then: ; preds = %entry 223 ret void 224 225 if.end: ; preds = %entry 226 ret void 227 } 228 229 define void @t14(i64 %a) uwtable ssp { 230 entry: 231 ; ELF64: t14 232 %cmp = icmp eq i64 %a, -1 233 ; ELF64: cmpdi 234 br i1 %cmp, label %if.then, label %if.end 235 236 if.then: ; preds = %entry 237 call void @foo() 238 br label %if.end 239 240 if.end: ; preds = %if.then, %entry 241 ret void 242 } 243 244 define void @t15(i64 %a) uwtable ssp { 245 entry: 246 ; ELF64: t15 247 %cmp = icmp eq i64 %a, 1 248 ; ELF64: cmpdi 249 br i1 %cmp, label %if.then, label %if.end 250 251 if.then: ; preds = %entry 252 call void @foo() 253 br label %if.end 254 255 if.end: ; preds = %if.then, %entry 256 ret void 257 } 258 259 define void @t16(i64 %a) uwtable ssp { 260 entry: 261 ; ELF64: t16 262 %cmp = icmp eq i64 %a, 384 263 ; ELF64: cmpdi 264 br i1 %cmp, label %if.then, label %if.end 265 266 if.then: ; preds = %entry 267 call void @foo() 268 br label %if.end 269 270 if.end: ; preds = %if.then, %entry 271 ret void 272 } 273 274 define void @t17(i64 %a) uwtable ssp { 275 entry: 276 ; ELF64: t17 277 %cmp = icmp eq i64 %a, 32768 278 ; Extra operand so we don't match on cmpdi. 279 ; ELF64: cmpd {{[0-9]+}} 280 br i1 %cmp, label %if.then, label %if.end 281 282 if.then: ; preds = %entry 283 call void @foo() 284 br label %if.end 285 286 if.end: ; preds = %if.then, %entry 287 ret void 288 } 289 290