1; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=ELF64 2 3define void @t1a(float %a) uwtable ssp { 4entry: 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 12if.then: ; preds = %entry 13 call void @foo() 14 br label %if.end 15 16if.end: ; preds = %if.then, %entry 17 ret void 18} 19 20declare void @foo() 21 22define void @t1b(float %a) uwtable ssp { 23entry: 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 31if.then: ; preds = %entry 32 call void @foo() 33 br label %if.end 34 35if.end: ; preds = %if.then, %entry 36 ret void 37} 38 39define void @t2a(double %a) uwtable ssp { 40entry: 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 48if.then: ; preds = %entry 49 call void @foo() 50 br label %if.end 51 52if.end: ; preds = %if.then, %entry 53 ret void 54} 55 56define void @t2b(double %a) uwtable ssp { 57entry: 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 65if.then: ; preds = %entry 66 call void @foo() 67 br label %if.end 68 69if.end: ; preds = %if.then, %entry 70 ret void 71} 72 73define void @t4(i8 signext %a) uwtable ssp { 74entry: 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 81if.then: ; preds = %entry 82 call void @foo() 83 br label %if.end 84 85if.end: ; preds = %if.then, %entry 86 ret void 87} 88 89define void @t5(i8 zeroext %a) uwtable ssp { 90entry: 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 97if.then: ; preds = %entry 98 call void @foo() 99 br label %if.end 100 101if.end: ; preds = %if.then, %entry 102 ret void 103} 104 105define void @t6(i16 signext %a) uwtable ssp { 106entry: 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 113if.then: ; preds = %entry 114 call void @foo() 115 br label %if.end 116 117if.end: ; preds = %if.then, %entry 118 ret void 119} 120 121define void @t7(i16 zeroext %a) uwtable ssp { 122entry: 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 129if.then: ; preds = %entry 130 call void @foo() 131 br label %if.end 132 133if.end: ; preds = %if.then, %entry 134 ret void 135} 136 137define void @t8(i32 %a) uwtable ssp { 138entry: 139; ELF64: t8 140 %cmp = icmp eq i32 %a, -1 141; ELF64: cmpwi 142 br i1 %cmp, label %if.then, label %if.end 143 144if.then: ; preds = %entry 145 call void @foo() 146 br label %if.end 147 148if.end: ; preds = %if.then, %entry 149 ret void 150} 151 152define void @t9(i32 %a) uwtable ssp { 153entry: 154; ELF64: t9 155 %cmp = icmp eq i32 %a, 1 156; ELF64: cmpwi 157 br i1 %cmp, label %if.then, label %if.end 158 159if.then: ; preds = %entry 160 call void @foo() 161 br label %if.end 162 163if.end: ; preds = %if.then, %entry 164 ret void 165} 166 167define void @t10(i32 %a) uwtable ssp { 168entry: 169; ELF64: t10 170 %cmp = icmp eq i32 %a, 384 171; ELF64: cmpwi 172 br i1 %cmp, label %if.then, label %if.end 173 174if.then: ; preds = %entry 175 call void @foo() 176 br label %if.end 177 178if.end: ; preds = %if.then, %entry 179 ret void 180} 181 182define void @t11(i32 %a) uwtable ssp { 183entry: 184; ELF64: t11 185 %cmp = icmp eq i32 %a, 4096 186; ELF64: cmpwi 187 br i1 %cmp, label %if.then, label %if.end 188 189if.then: ; preds = %entry 190 call void @foo() 191 br label %if.end 192 193if.end: ; preds = %if.then, %entry 194 ret void 195} 196 197define void @t12(i8 %a) uwtable ssp { 198entry: 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 205if.then: ; preds = %entry 206 call void @foo() 207 br label %if.end 208 209if.end: ; preds = %if.then, %entry 210 ret void 211} 212 213define void @t13() nounwind ssp { 214entry: 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 222if.then: ; preds = %entry 223 ret void 224 225if.end: ; preds = %entry 226 ret void 227} 228 229define void @t14(i64 %a) uwtable ssp { 230entry: 231; ELF64: t14 232 %cmp = icmp eq i64 %a, -1 233; ELF64: cmpdi 234 br i1 %cmp, label %if.then, label %if.end 235 236if.then: ; preds = %entry 237 call void @foo() 238 br label %if.end 239 240if.end: ; preds = %if.then, %entry 241 ret void 242} 243 244define void @t15(i64 %a) uwtable ssp { 245entry: 246; ELF64: t15 247 %cmp = icmp eq i64 %a, 1 248; ELF64: cmpdi 249 br i1 %cmp, label %if.then, label %if.end 250 251if.then: ; preds = %entry 252 call void @foo() 253 br label %if.end 254 255if.end: ; preds = %if.then, %entry 256 ret void 257} 258 259define void @t16(i64 %a) uwtable ssp { 260entry: 261; ELF64: t16 262 %cmp = icmp eq i64 %a, 384 263; ELF64: cmpdi 264 br i1 %cmp, label %if.then, label %if.end 265 266if.then: ; preds = %entry 267 call void @foo() 268 br label %if.end 269 270if.end: ; preds = %if.then, %entry 271 ret void 272} 273 274define void @t17(i64 %a) uwtable ssp { 275entry: 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 282if.then: ; preds = %entry 283 call void @foo() 284 br label %if.end 285 286if.end: ; preds = %if.then, %entry 287 ret void 288} 289 290