1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr8 \ 3; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=AIX32 4; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr8 \ 5; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=AIX64 6; RUN: llc -verify-machineinstrs -mtriple powerpc64-unknown-linux -mcpu=pwr8 \ 7; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=LINUX64BE 8; RUN: llc -verify-machineinstrs -mtriple powerpc64le-unknown-linux -mcpu=pwr8 \ 9; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=LINUX64LE 10 11define dso_local i64 @rotatemask32(i64 noundef %word) local_unnamed_addr #0 { 12; AIX32-LABEL: rotatemask32: 13; AIX32: # %bb.0: # %entry 14; AIX32-NEXT: cntlzw r5, r3 15; AIX32-NEXT: cmplwi r3, 0 16; AIX32-NEXT: cntlzw r3, r4 17; AIX32-NEXT: addi r3, r3, 32 18; AIX32-NEXT: iseleq r3, r3, r5 19; AIX32-NEXT: rlwnm r4, r4, r3, 1, 31 20; AIX32-NEXT: li r3, 0 21; AIX32-NEXT: blr 22; 23; AIX64-LABEL: rotatemask32: 24; AIX64: # %bb.0: # %entry 25; AIX64-NEXT: cntlzd r4, r3 26; AIX64-NEXT: rlwnm r3, r3, r4, 1, 31 27; AIX64-NEXT: blr 28; 29; LINUX64BE-LABEL: rotatemask32: 30; LINUX64BE: # %bb.0: # %entry 31; LINUX64BE-NEXT: cntlzd r4, r3 32; LINUX64BE-NEXT: rlwnm r3, r3, r4, 1, 31 33; LINUX64BE-NEXT: blr 34; 35; LINUX64LE-LABEL: rotatemask32: 36; LINUX64LE: # %bb.0: # %entry 37; LINUX64LE-NEXT: cntlzd r4, r3 38; LINUX64LE-NEXT: rlwnm r3, r3, r4, 1, 31 39; LINUX64LE-NEXT: blr 40entry: 41 %0 = tail call i64 @llvm.ctlz.i64(i64 %word, i1 false) 42 %cast = trunc i64 %0 to i32 43 %conv1 = trunc i64 %word to i32 44 %1 = tail call i32 @llvm.fshl.i32(i32 %conv1, i32 %conv1, i32 %cast) 45 %2 = and i32 %1, 2147483647 46 %and = zext i32 %2 to i64 47 ret i64 %and 48} 49 50declare i64 @llvm.ctlz.i64(i64, i1 immarg) #0 51declare i32 @llvm.fshl.i32(i32, i32, i32) #0 52 53define dso_local i64 @rotatemask64(i64 noundef %word) local_unnamed_addr #0 { 54; AIX32-LABEL: rotatemask64: 55; AIX32: # %bb.0: # %entry 56; AIX32-NEXT: cmplwi r3, 0 57; AIX32-NEXT: cntlzw r6, r4 58; AIX32-NEXT: addi r6, r6, 32 59; AIX32-NEXT: cntlzw r5, r3 60; AIX32-NEXT: iseleq r5, r6, r5 61; AIX32-NEXT: andi. r6, r5, 32 62; AIX32-NEXT: clrlwi r5, r5, 27 63; AIX32-NEXT: iseleq r6, r3, r4 64; AIX32-NEXT: iseleq r3, r4, r3 65; AIX32-NEXT: subfic r7, r5, 32 66; AIX32-NEXT: slw r4, r3, r5 67; AIX32-NEXT: srw r3, r3, r7 68; AIX32-NEXT: slw r5, r6, r5 69; AIX32-NEXT: srw r8, r6, r7 70; AIX32-NEXT: or r3, r5, r3 71; AIX32-NEXT: or r4, r4, r8 72; AIX32-NEXT: clrlwi r3, r3, 1 73; AIX32-NEXT: blr 74; 75; AIX64-LABEL: rotatemask64: 76; AIX64: # %bb.0: # %entry 77; AIX64-NEXT: cntlzd r4, r3 78; AIX64-NEXT: rldcl r3, r3, r4, 1 79; AIX64-NEXT: blr 80; 81; LINUX64BE-LABEL: rotatemask64: 82; LINUX64BE: # %bb.0: # %entry 83; LINUX64BE-NEXT: cntlzd r4, r3 84; LINUX64BE-NEXT: rldcl r3, r3, r4, 1 85; LINUX64BE-NEXT: blr 86; 87; LINUX64LE-LABEL: rotatemask64: 88; LINUX64LE: # %bb.0: # %entry 89; LINUX64LE-NEXT: cntlzd r4, r3 90; LINUX64LE-NEXT: rldcl r3, r3, r4, 1 91; LINUX64LE-NEXT: blr 92entry: 93 %0 = tail call i64 @llvm.ctlz.i64(i64 %word, i1 false) 94 %1 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 %0) 95 %and = and i64 %1, 9223372036854775807 96 ret i64 %and 97} 98 99declare i64 @llvm.fshl.i64(i64, i64, i64) #1 100 101define dso_local i64 @rotatemask64_2(i64 noundef %word) local_unnamed_addr #0 { 102; AIX32-LABEL: rotatemask64_2: 103; AIX32: # %bb.0: # %entry 104; AIX32-NEXT: cmplwi r3, 0 105; AIX32-NEXT: cntlzw r6, r4 106; AIX32-NEXT: addi r6, r6, 32 107; AIX32-NEXT: cntlzw r5, r3 108; AIX32-NEXT: iseleq r5, r6, r5 109; AIX32-NEXT: andi. r6, r5, 32 110; AIX32-NEXT: clrlwi r5, r5, 27 111; AIX32-NEXT: iseleq r6, r3, r4 112; AIX32-NEXT: iseleq r3, r4, r3 113; AIX32-NEXT: subfic r7, r5, 32 114; AIX32-NEXT: slw r4, r3, r5 115; AIX32-NEXT: srw r3, r3, r7 116; AIX32-NEXT: slw r5, r6, r5 117; AIX32-NEXT: srw r8, r6, r7 118; AIX32-NEXT: or r3, r5, r3 119; AIX32-NEXT: or r4, r4, r8 120; AIX32-NEXT: clrlwi r3, r3, 1 121; AIX32-NEXT: blr 122; 123; AIX64-LABEL: rotatemask64_2: 124; AIX64: # %bb.0: # %entry 125; AIX64-NEXT: cntlzd r4, r3 126; AIX64-NEXT: rldcl r3, r3, r4, 1 127; AIX64-NEXT: blr 128; 129; LINUX64BE-LABEL: rotatemask64_2: 130; LINUX64BE: # %bb.0: # %entry 131; LINUX64BE-NEXT: cntlzd r4, r3 132; LINUX64BE-NEXT: rldcl r3, r3, r4, 1 133; LINUX64BE-NEXT: blr 134; 135; LINUX64LE-LABEL: rotatemask64_2: 136; LINUX64LE: # %bb.0: # %entry 137; LINUX64LE-NEXT: cntlzd r4, r3 138; LINUX64LE-NEXT: rldcl r3, r3, r4, 1 139; LINUX64LE-NEXT: blr 140entry: 141 %0 = tail call i64 @llvm.ctlz.i64(i64 %word, i1 false) 142 %1 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 %0) 143 %and = and i64 %1, 9223372036854775807 144 ret i64 %and 145} 146 147define dso_local i64 @rotatemask64_3(i64 noundef %word) local_unnamed_addr #0 { 148; AIX32-LABEL: rotatemask64_3: 149; AIX32: # %bb.0: # %entry 150; AIX32-NEXT: cmplwi r3, 0 151; AIX32-NEXT: cntlzw r6, r4 152; AIX32-NEXT: addi r6, r6, 32 153; AIX32-NEXT: cntlzw r5, r3 154; AIX32-NEXT: iseleq r5, r6, r5 155; AIX32-NEXT: andi. r6, r5, 32 156; AIX32-NEXT: clrlwi r5, r5, 27 157; AIX32-NEXT: iseleq r6, r3, r4 158; AIX32-NEXT: iseleq r3, r4, r3 159; AIX32-NEXT: subfic r7, r5, 32 160; AIX32-NEXT: srw r8, r6, r7 161; AIX32-NEXT: slw r4, r3, r5 162; AIX32-NEXT: srw r3, r3, r7 163; AIX32-NEXT: slw r5, r6, r5 164; AIX32-NEXT: or r4, r4, r8 165; AIX32-NEXT: or r3, r5, r3 166; AIX32-NEXT: clrlwi r3, r3, 1 167; AIX32-NEXT: rlwinm r4, r4, 0, 0, 23 168; AIX32-NEXT: blr 169; 170; AIX64-LABEL: rotatemask64_3: 171; AIX64: # %bb.0: # %entry 172; AIX64-NEXT: cntlzd r4, r3 173; AIX64-NEXT: rotld r3, r3, r4 174; AIX64-NEXT: rldicl r3, r3, 56, 8 175; AIX64-NEXT: rldicl r3, r3, 8, 1 176; AIX64-NEXT: blr 177; 178; LINUX64BE-LABEL: rotatemask64_3: 179; LINUX64BE: # %bb.0: # %entry 180; LINUX64BE-NEXT: cntlzd r4, r3 181; LINUX64BE-NEXT: rotld r3, r3, r4 182; LINUX64BE-NEXT: rldicl r3, r3, 56, 8 183; LINUX64BE-NEXT: rldicl r3, r3, 8, 1 184; LINUX64BE-NEXT: blr 185; 186; LINUX64LE-LABEL: rotatemask64_3: 187; LINUX64LE: # %bb.0: # %entry 188; LINUX64LE-NEXT: cntlzd r4, r3 189; LINUX64LE-NEXT: rotld r3, r3, r4 190; LINUX64LE-NEXT: rldicl r3, r3, 56, 8 191; LINUX64LE-NEXT: rldicl r3, r3, 8, 1 192; LINUX64LE-NEXT: blr 193entry: 194 %0 = tail call i64 @llvm.ctlz.i64(i64 %word, i1 false) 195 %1 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 %0) 196 %and = and i64 %1, 9223372036854775552 197 ret i64 %and 198} 199 200define dso_local i64 @rotatemask64_nocount(i64 noundef %word, i64 noundef %clz) local_unnamed_addr #0 { 201; AIX32-LABEL: rotatemask64_nocount: 202; AIX32: # %bb.0: # %entry 203; AIX32-NEXT: andi. r5, r6, 32 204; AIX32-NEXT: clrlwi r6, r6, 27 205; AIX32-NEXT: subfic r7, r6, 32 206; AIX32-NEXT: iseleq r5, r3, r4 207; AIX32-NEXT: iseleq r3, r4, r3 208; AIX32-NEXT: srw r8, r5, r7 209; AIX32-NEXT: slw r4, r3, r6 210; AIX32-NEXT: srw r3, r3, r7 211; AIX32-NEXT: slw r5, r5, r6 212; AIX32-NEXT: or r3, r5, r3 213; AIX32-NEXT: or r4, r4, r8 214; AIX32-NEXT: clrlwi r3, r3, 8 215; AIX32-NEXT: blr 216; 217; AIX64-LABEL: rotatemask64_nocount: 218; AIX64: # %bb.0: # %entry 219; AIX64-NEXT: rldcl r3, r3, r4, 8 220; AIX64-NEXT: blr 221; 222; LINUX64BE-LABEL: rotatemask64_nocount: 223; LINUX64BE: # %bb.0: # %entry 224; LINUX64BE-NEXT: rldcl r3, r3, r4, 8 225; LINUX64BE-NEXT: blr 226; 227; LINUX64LE-LABEL: rotatemask64_nocount: 228; LINUX64LE: # %bb.0: # %entry 229; LINUX64LE-NEXT: rldcl r3, r3, r4, 8 230; LINUX64LE-NEXT: blr 231entry: 232 %0 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 %clz) 233 %and = and i64 %0, 72057594037927935 234 ret i64 %and 235} 236 237define dso_local i64 @builtincheck(i64 noundef %word, i64 noundef %shift) local_unnamed_addr #0 { 238; AIX32-LABEL: builtincheck: 239; AIX32: # %bb.0: # %entry 240; AIX32-NEXT: andi. r5, r6, 32 241; AIX32-NEXT: clrlwi r6, r6, 27 242; AIX32-NEXT: subfic r7, r6, 32 243; AIX32-NEXT: iseleq r5, r3, r4 244; AIX32-NEXT: iseleq r3, r4, r3 245; AIX32-NEXT: srw r8, r5, r7 246; AIX32-NEXT: slw r4, r3, r6 247; AIX32-NEXT: srw r3, r3, r7 248; AIX32-NEXT: slw r5, r5, r6 249; AIX32-NEXT: or r3, r5, r3 250; AIX32-NEXT: or r4, r4, r8 251; AIX32-NEXT: clrlwi r3, r3, 1 252; AIX32-NEXT: blr 253; 254; AIX64-LABEL: builtincheck: 255; AIX64: # %bb.0: # %entry 256; AIX64-NEXT: rldcl r3, r3, r4, 1 257; AIX64-NEXT: blr 258; 259; LINUX64BE-LABEL: builtincheck: 260; LINUX64BE: # %bb.0: # %entry 261; LINUX64BE-NEXT: rldcl r3, r3, r4, 1 262; LINUX64BE-NEXT: blr 263; 264; LINUX64LE-LABEL: builtincheck: 265; LINUX64LE: # %bb.0: # %entry 266; LINUX64LE-NEXT: rldcl r3, r3, r4, 1 267; LINUX64LE-NEXT: blr 268entry: 269 %0 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 %shift) 270 %1 = and i64 %0, 9223372036854775807 271 ret i64 %1 272} 273 274define dso_local i64 @immshift(i64 noundef %word) local_unnamed_addr #0 { 275; AIX32-LABEL: immshift: 276; AIX32: # %bb.0: # %entry 277; AIX32-NEXT: rotlwi r5, r3, 15 278; AIX32-NEXT: rlwimi r5, r4, 15, 0, 16 279; AIX32-NEXT: srwi r4, r4, 17 280; AIX32-NEXT: rlwimi r4, r3, 15, 12, 16 281; AIX32-NEXT: mr r3, r4 282; AIX32-NEXT: mr r4, r5 283; AIX32-NEXT: blr 284; 285; AIX64-LABEL: immshift: 286; AIX64: # %bb.0: # %entry 287; AIX64-NEXT: rldicl r3, r3, 15, 12 288; AIX64-NEXT: blr 289; 290; LINUX64BE-LABEL: immshift: 291; LINUX64BE: # %bb.0: # %entry 292; LINUX64BE-NEXT: rldicl r3, r3, 15, 12 293; LINUX64BE-NEXT: blr 294; 295; LINUX64LE-LABEL: immshift: 296; LINUX64LE: # %bb.0: # %entry 297; LINUX64LE-NEXT: rldicl r3, r3, 15, 12 298; LINUX64LE-NEXT: blr 299entry: 300 %0 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 15) 301 %and = and i64 %0, 4503599627370495 302 ret i64 %and 303} 304 305define dso_local i64 @twomasks(i64 noundef %word) local_unnamed_addr #0 { 306; AIX32-LABEL: twomasks: 307; AIX32: # %bb.0: # %entry 308; AIX32-NEXT: mflr r0 309; AIX32-NEXT: stwu r1, -64(r1) 310; AIX32-NEXT: cmplwi r3, 0 311; AIX32-NEXT: cntlzw r6, r4 312; AIX32-NEXT: stw r0, 72(r1) 313; AIX32-NEXT: addi r6, r6, 32 314; AIX32-NEXT: cntlzw r5, r3 315; AIX32-NEXT: iseleq r5, r6, r5 316; AIX32-NEXT: andi. r6, r5, 32 317; AIX32-NEXT: clrlwi r5, r5, 27 318; AIX32-NEXT: iseleq r6, r3, r4 319; AIX32-NEXT: iseleq r3, r4, r3 320; AIX32-NEXT: subfic r7, r5, 32 321; AIX32-NEXT: srw r8, r6, r7 322; AIX32-NEXT: slw r4, r3, r5 323; AIX32-NEXT: srw r3, r3, r7 324; AIX32-NEXT: slw r5, r6, r5 325; AIX32-NEXT: or r4, r4, r8 326; AIX32-NEXT: or r5, r5, r3 327; AIX32-NEXT: clrlwi r3, r5, 1 328; AIX32-NEXT: clrlwi r5, r5, 16 329; AIX32-NEXT: mr r6, r4 330; AIX32-NEXT: bl .callee[PR] 331; AIX32-NEXT: nop 332; AIX32-NEXT: addi r1, r1, 64 333; AIX32-NEXT: lwz r0, 8(r1) 334; AIX32-NEXT: mtlr r0 335; AIX32-NEXT: blr 336; 337; AIX64-LABEL: twomasks: 338; AIX64: # %bb.0: # %entry 339; AIX64-NEXT: mflr r0 340; AIX64-NEXT: stdu r1, -112(r1) 341; AIX64-NEXT: cntlzd r4, r3 342; AIX64-NEXT: std r0, 128(r1) 343; AIX64-NEXT: rldcl r5, r3, r4, 1 344; AIX64-NEXT: rldcl r4, r3, r4, 16 345; AIX64-NEXT: mr r3, r5 346; AIX64-NEXT: bl .callee[PR] 347; AIX64-NEXT: nop 348; AIX64-NEXT: addi r1, r1, 112 349; AIX64-NEXT: ld r0, 16(r1) 350; AIX64-NEXT: mtlr r0 351; AIX64-NEXT: blr 352; 353; LINUX64BE-LABEL: twomasks: 354; LINUX64BE: # %bb.0: # %entry 355; LINUX64BE-NEXT: mflr r0 356; LINUX64BE-NEXT: stdu r1, -112(r1) 357; LINUX64BE-NEXT: cntlzd r4, r3 358; LINUX64BE-NEXT: std r0, 128(r1) 359; LINUX64BE-NEXT: rldcl r5, r3, r4, 1 360; LINUX64BE-NEXT: rldcl r4, r3, r4, 16 361; LINUX64BE-NEXT: mr r3, r5 362; LINUX64BE-NEXT: bl callee 363; LINUX64BE-NEXT: nop 364; LINUX64BE-NEXT: addi r1, r1, 112 365; LINUX64BE-NEXT: ld r0, 16(r1) 366; LINUX64BE-NEXT: mtlr r0 367; LINUX64BE-NEXT: blr 368; 369; LINUX64LE-LABEL: twomasks: 370; LINUX64LE: # %bb.0: # %entry 371; LINUX64LE-NEXT: mflr r0 372; LINUX64LE-NEXT: stdu r1, -32(r1) 373; LINUX64LE-NEXT: cntlzd r4, r3 374; LINUX64LE-NEXT: std r0, 48(r1) 375; LINUX64LE-NEXT: rldcl r5, r3, r4, 1 376; LINUX64LE-NEXT: rldcl r4, r3, r4, 16 377; LINUX64LE-NEXT: mr r3, r5 378; LINUX64LE-NEXT: bl callee 379; LINUX64LE-NEXT: nop 380; LINUX64LE-NEXT: addi r1, r1, 32 381; LINUX64LE-NEXT: ld r0, 16(r1) 382; LINUX64LE-NEXT: mtlr r0 383; LINUX64LE-NEXT: blr 384entry: 385 %0 = tail call i64 @llvm.ctlz.i64(i64 %word, i1 false) 386 %1 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 %0) 387 %and = and i64 %1, 9223372036854775807 388 %and1 = and i64 %1, 281474976710655 389 %call = tail call i64 @callee(i64 noundef %and, i64 noundef %and1) #0 390 ret i64 %call 391} 392 393declare i64 @callee(i64 noundef, i64 noundef) local_unnamed_addr #0 394 395define dso_local i64 @tworotates(i64 noundef %word) local_unnamed_addr #0 { 396; AIX32-LABEL: tworotates: 397; AIX32: # %bb.0: # %entry 398; AIX32-NEXT: mflr r0 399; AIX32-NEXT: stwu r1, -64(r1) 400; AIX32-NEXT: cmplwi r3, 0 401; AIX32-NEXT: cntlzw r6, r4 402; AIX32-NEXT: stw r0, 72(r1) 403; AIX32-NEXT: addi r6, r6, 32 404; AIX32-NEXT: cntlzw r5, r3 405; AIX32-NEXT: iseleq r5, r6, r5 406; AIX32-NEXT: andi. r6, r5, 32 407; AIX32-NEXT: clrlwi r5, r5, 27 408; AIX32-NEXT: iseleq r6, r3, r4 409; AIX32-NEXT: iseleq r9, r4, r3 410; AIX32-NEXT: subfic r7, r5, 32 411; AIX32-NEXT: srw r8, r6, r7 412; AIX32-NEXT: slw r10, r9, r5 413; AIX32-NEXT: srw r7, r9, r7 414; AIX32-NEXT: slw r5, r6, r5 415; AIX32-NEXT: rotlwi r6, r3, 23 416; AIX32-NEXT: or r5, r5, r7 417; AIX32-NEXT: or r8, r10, r8 418; AIX32-NEXT: rlwimi r6, r4, 23, 0, 8 419; AIX32-NEXT: clrlwi r7, r5, 1 420; AIX32-NEXT: srwi r5, r4, 9 421; AIX32-NEXT: mr r4, r8 422; AIX32-NEXT: rlwimi r5, r3, 23, 1, 8 423; AIX32-NEXT: mr r3, r7 424; AIX32-NEXT: bl .callee[PR] 425; AIX32-NEXT: nop 426; AIX32-NEXT: addi r1, r1, 64 427; AIX32-NEXT: lwz r0, 8(r1) 428; AIX32-NEXT: mtlr r0 429; AIX32-NEXT: blr 430; 431; AIX64-LABEL: tworotates: 432; AIX64: # %bb.0: # %entry 433; AIX64-NEXT: mflr r0 434; AIX64-NEXT: stdu r1, -112(r1) 435; AIX64-NEXT: cntlzd r4, r3 436; AIX64-NEXT: std r0, 128(r1) 437; AIX64-NEXT: rldcl r5, r3, r4, 1 438; AIX64-NEXT: rldicl r4, r3, 23, 1 439; AIX64-NEXT: mr r3, r5 440; AIX64-NEXT: bl .callee[PR] 441; AIX64-NEXT: nop 442; AIX64-NEXT: addi r1, r1, 112 443; AIX64-NEXT: ld r0, 16(r1) 444; AIX64-NEXT: mtlr r0 445; AIX64-NEXT: blr 446; 447; LINUX64BE-LABEL: tworotates: 448; LINUX64BE: # %bb.0: # %entry 449; LINUX64BE-NEXT: mflr r0 450; LINUX64BE-NEXT: stdu r1, -112(r1) 451; LINUX64BE-NEXT: cntlzd r4, r3 452; LINUX64BE-NEXT: std r0, 128(r1) 453; LINUX64BE-NEXT: rldcl r5, r3, r4, 1 454; LINUX64BE-NEXT: rldicl r4, r3, 23, 1 455; LINUX64BE-NEXT: mr r3, r5 456; LINUX64BE-NEXT: bl callee 457; LINUX64BE-NEXT: nop 458; LINUX64BE-NEXT: addi r1, r1, 112 459; LINUX64BE-NEXT: ld r0, 16(r1) 460; LINUX64BE-NEXT: mtlr r0 461; LINUX64BE-NEXT: blr 462; 463; LINUX64LE-LABEL: tworotates: 464; LINUX64LE: # %bb.0: # %entry 465; LINUX64LE-NEXT: mflr r0 466; LINUX64LE-NEXT: stdu r1, -32(r1) 467; LINUX64LE-NEXT: cntlzd r4, r3 468; LINUX64LE-NEXT: std r0, 48(r1) 469; LINUX64LE-NEXT: rldcl r5, r3, r4, 1 470; LINUX64LE-NEXT: rldicl r4, r3, 23, 1 471; LINUX64LE-NEXT: mr r3, r5 472; LINUX64LE-NEXT: bl callee 473; LINUX64LE-NEXT: nop 474; LINUX64LE-NEXT: addi r1, r1, 32 475; LINUX64LE-NEXT: ld r0, 16(r1) 476; LINUX64LE-NEXT: mtlr r0 477; LINUX64LE-NEXT: blr 478entry: 479 %0 = tail call i64 @llvm.ctlz.i64(i64 %word, i1 false) 480 %1 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 %0) 481 %2 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 23) 482 %and = and i64 %1, 9223372036854775807 483 %and1 = and i64 %2, 9223372036854775807 484 %call = tail call i64 @callee(i64 noundef %and, i64 noundef %and1) #0 485 ret i64 %call 486} 487 488attributes #0 = { nounwind } 489