brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.0 KiB · ea32edb Raw
702 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-linux | FileCheck %s --check-prefixes=X863; RUN: llc < %s -mtriple=x86_64-unknown-linux | FileCheck %s --check-prefixes=X644 5define i64 @rotl64(i64 %A, i8 %Amt) nounwind {6; X86-LABEL: rotl64:7; X86:       # %bb.0:8; X86-NEXT:    pushl %ebx9; X86-NEXT:    pushl %edi10; X86-NEXT:    pushl %esi11; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx12; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi13; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi14; X86-NEXT:    movl %esi, %eax15; X86-NEXT:    shll %cl, %eax16; X86-NEXT:    movl %edi, %edx17; X86-NEXT:    shldl %cl, %esi, %edx18; X86-NEXT:    testb $32, %cl19; X86-NEXT:    je .LBB0_220; X86-NEXT:  # %bb.1:21; X86-NEXT:    movl %eax, %edx22; X86-NEXT:    xorl %eax, %eax23; X86-NEXT:  .LBB0_2:24; X86-NEXT:    movb $64, %ch25; X86-NEXT:    subb %cl, %ch26; X86-NEXT:    movl %edi, %ebx27; X86-NEXT:    movb %ch, %cl28; X86-NEXT:    shrl %cl, %ebx29; X86-NEXT:    shrdl %cl, %edi, %esi30; X86-NEXT:    testb $32, %ch31; X86-NEXT:    je .LBB0_432; X86-NEXT:  # %bb.3:33; X86-NEXT:    movl %ebx, %esi34; X86-NEXT:    xorl %ebx, %ebx35; X86-NEXT:  .LBB0_4:36; X86-NEXT:    orl %ebx, %edx37; X86-NEXT:    orl %esi, %eax38; X86-NEXT:    popl %esi39; X86-NEXT:    popl %edi40; X86-NEXT:    popl %ebx41; X86-NEXT:    retl42;43; X64-LABEL: rotl64:44; X64:       # %bb.0:45; X64-NEXT:    movl %esi, %ecx46; X64-NEXT:    movq %rdi, %rax47; X64-NEXT:    # kill: def $cl killed $cl killed $ecx48; X64-NEXT:    rolq %cl, %rax49; X64-NEXT:    retq50	%shift.upgrd.1 = zext i8 %Amt to i6451	%B = shl i64 %A, %shift.upgrd.152	%Amt2 = sub i8 64, %Amt53	%shift.upgrd.2 = zext i8 %Amt2 to i6454	%C = lshr i64 %A, %shift.upgrd.255	%D = or i64 %B, %C56	ret i64 %D57}58 59define i64 @rotr64(i64 %A, i8 %Amt) nounwind {60; X86-LABEL: rotr64:61; X86:       # %bb.0:62; X86-NEXT:    pushl %ebx63; X86-NEXT:    pushl %edi64; X86-NEXT:    pushl %esi65; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx66; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi67; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi68; X86-NEXT:    movl %esi, %edx69; X86-NEXT:    shrl %cl, %edx70; X86-NEXT:    movl %edi, %eax71; X86-NEXT:    shrdl %cl, %esi, %eax72; X86-NEXT:    testb $32, %cl73; X86-NEXT:    je .LBB1_274; X86-NEXT:  # %bb.1:75; X86-NEXT:    movl %edx, %eax76; X86-NEXT:    xorl %edx, %edx77; X86-NEXT:  .LBB1_2:78; X86-NEXT:    movb $64, %ch79; X86-NEXT:    subb %cl, %ch80; X86-NEXT:    movl %edi, %ebx81; X86-NEXT:    movb %ch, %cl82; X86-NEXT:    shll %cl, %ebx83; X86-NEXT:    shldl %cl, %edi, %esi84; X86-NEXT:    testb $32, %ch85; X86-NEXT:    je .LBB1_486; X86-NEXT:  # %bb.3:87; X86-NEXT:    movl %ebx, %esi88; X86-NEXT:    xorl %ebx, %ebx89; X86-NEXT:  .LBB1_4:90; X86-NEXT:    orl %esi, %edx91; X86-NEXT:    orl %ebx, %eax92; X86-NEXT:    popl %esi93; X86-NEXT:    popl %edi94; X86-NEXT:    popl %ebx95; X86-NEXT:    retl96;97; X64-LABEL: rotr64:98; X64:       # %bb.0:99; X64-NEXT:    movl %esi, %ecx100; X64-NEXT:    movq %rdi, %rax101; X64-NEXT:    # kill: def $cl killed $cl killed $ecx102; X64-NEXT:    rorq %cl, %rax103; X64-NEXT:    retq104	%shift.upgrd.3 = zext i8 %Amt to i64105	%B = lshr i64 %A, %shift.upgrd.3106	%Amt2 = sub i8 64, %Amt107	%shift.upgrd.4 = zext i8 %Amt2 to i64108	%C = shl i64 %A, %shift.upgrd.4109	%D = or i64 %B, %C110	ret i64 %D111}112 113define i64 @rotli64(i64 %A) nounwind {114; X86-LABEL: rotli64:115; X86:       # %bb.0:116; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx117; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx118; X86-NEXT:    movl %ecx, %eax119; X86-NEXT:    shldl $5, %edx, %eax120; X86-NEXT:    shldl $5, %ecx, %edx121; X86-NEXT:    retl122;123; X64-LABEL: rotli64:124; X64:       # %bb.0:125; X64-NEXT:    movq %rdi, %rax126; X64-NEXT:    rolq $5, %rax127; X64-NEXT:    retq128	%B = shl i64 %A, 5129	%C = lshr i64 %A, 59130	%D = or i64 %B, %C131	ret i64 %D132}133 134define i64 @rotri64(i64 %A) nounwind {135; X86-LABEL: rotri64:136; X86:       # %bb.0:137; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx138; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx139; X86-NEXT:    movl %ecx, %eax140; X86-NEXT:    shldl $27, %edx, %eax141; X86-NEXT:    shldl $27, %ecx, %edx142; X86-NEXT:    retl143;144; X64-LABEL: rotri64:145; X64:       # %bb.0:146; X64-NEXT:    movq %rdi, %rax147; X64-NEXT:    rolq $59, %rax148; X64-NEXT:    retq149	%B = lshr i64 %A, 5150	%C = shl i64 %A, 59151	%D = or i64 %B, %C152	ret i64 %D153}154 155define i64 @rotl1_64(i64 %A) nounwind {156; X86-LABEL: rotl1_64:157; X86:       # %bb.0:158; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx159; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx160; X86-NEXT:    movl %ecx, %eax161; X86-NEXT:    shldl $1, %edx, %eax162; X86-NEXT:    shldl $1, %ecx, %edx163; X86-NEXT:    retl164;165; X64-LABEL: rotl1_64:166; X64:       # %bb.0:167; X64-NEXT:    movq %rdi, %rax168; X64-NEXT:    rolq %rax169; X64-NEXT:    retq170	%B = shl i64 %A, 1171	%C = lshr i64 %A, 63172	%D = or i64 %B, %C173	ret i64 %D174}175 176define i64 @rotr1_64(i64 %A) nounwind {177; X86-LABEL: rotr1_64:178; X86:       # %bb.0:179; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx180; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx181; X86-NEXT:    movl %ecx, %eax182; X86-NEXT:    shldl $31, %edx, %eax183; X86-NEXT:    shldl $31, %ecx, %edx184; X86-NEXT:    retl185;186; X64-LABEL: rotr1_64:187; X64:       # %bb.0:188; X64-NEXT:    movq %rdi, %rax189; X64-NEXT:    rorq %rax190; X64-NEXT:    retq191	%B = shl i64 %A, 63192	%C = lshr i64 %A, 1193	%D = or i64 %B, %C194	ret i64 %D195}196 197define i32 @rotl32(i32 %A, i8 %Amt) nounwind {198; X86-LABEL: rotl32:199; X86:       # %bb.0:200; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx201; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax202; X86-NEXT:    roll %cl, %eax203; X86-NEXT:    retl204;205; X64-LABEL: rotl32:206; X64:       # %bb.0:207; X64-NEXT:    movl %esi, %ecx208; X64-NEXT:    movl %edi, %eax209; X64-NEXT:    # kill: def $cl killed $cl killed $ecx210; X64-NEXT:    roll %cl, %eax211; X64-NEXT:    retq212	%shift.upgrd.1 = zext i8 %Amt to i32213	%B = shl i32 %A, %shift.upgrd.1214	%Amt2 = sub i8 32, %Amt215	%shift.upgrd.2 = zext i8 %Amt2 to i32216	%C = lshr i32 %A, %shift.upgrd.2217	%D = or i32 %B, %C218	ret i32 %D219}220 221define i32 @rotr32(i32 %A, i8 %Amt) nounwind {222; X86-LABEL: rotr32:223; X86:       # %bb.0:224; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx225; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax226; X86-NEXT:    rorl %cl, %eax227; X86-NEXT:    retl228;229; X64-LABEL: rotr32:230; X64:       # %bb.0:231; X64-NEXT:    movl %esi, %ecx232; X64-NEXT:    movl %edi, %eax233; X64-NEXT:    # kill: def $cl killed $cl killed $ecx234; X64-NEXT:    rorl %cl, %eax235; X64-NEXT:    retq236	%shift.upgrd.3 = zext i8 %Amt to i32237	%B = lshr i32 %A, %shift.upgrd.3238	%Amt2 = sub i8 32, %Amt239	%shift.upgrd.4 = zext i8 %Amt2 to i32240	%C = shl i32 %A, %shift.upgrd.4241	%D = or i32 %B, %C242	ret i32 %D243}244 245define i32 @rotli32(i32 %A) nounwind {246; X86-LABEL: rotli32:247; X86:       # %bb.0:248; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax249; X86-NEXT:    roll $5, %eax250; X86-NEXT:    retl251;252; X64-LABEL: rotli32:253; X64:       # %bb.0:254; X64-NEXT:    movl %edi, %eax255; X64-NEXT:    roll $5, %eax256; X64-NEXT:    retq257	%B = shl i32 %A, 5258	%C = lshr i32 %A, 27259	%D = or i32 %B, %C260	ret i32 %D261}262 263define i32 @rotri32(i32 %A) nounwind {264; X86-LABEL: rotri32:265; X86:       # %bb.0:266; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax267; X86-NEXT:    roll $27, %eax268; X86-NEXT:    retl269;270; X64-LABEL: rotri32:271; X64:       # %bb.0:272; X64-NEXT:    movl %edi, %eax273; X64-NEXT:    roll $27, %eax274; X64-NEXT:    retq275	%B = lshr i32 %A, 5276	%C = shl i32 %A, 27277	%D = or i32 %B, %C278	ret i32 %D279}280 281define i32 @rotl1_32(i32 %A) nounwind {282; X86-LABEL: rotl1_32:283; X86:       # %bb.0:284; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax285; X86-NEXT:    roll %eax286; X86-NEXT:    retl287;288; X64-LABEL: rotl1_32:289; X64:       # %bb.0:290; X64-NEXT:    movl %edi, %eax291; X64-NEXT:    roll %eax292; X64-NEXT:    retq293	%B = shl i32 %A, 1294	%C = lshr i32 %A, 31295	%D = or i32 %B, %C296	ret i32 %D297}298 299define i32 @rotr1_32(i32 %A) nounwind {300; X86-LABEL: rotr1_32:301; X86:       # %bb.0:302; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax303; X86-NEXT:    rorl %eax304; X86-NEXT:    retl305;306; X64-LABEL: rotr1_32:307; X64:       # %bb.0:308; X64-NEXT:    movl %edi, %eax309; X64-NEXT:    rorl %eax310; X64-NEXT:    retq311	%B = shl i32 %A, 31312	%C = lshr i32 %A, 1313	%D = or i32 %B, %C314	ret i32 %D315}316 317define i16 @rotl16(i16 %A, i8 %Amt) nounwind {318; X86-LABEL: rotl16:319; X86:       # %bb.0:320; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx321; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax322; X86-NEXT:    rolw %cl, %ax323; X86-NEXT:    retl324;325; X64-LABEL: rotl16:326; X64:       # %bb.0:327; X64-NEXT:    movl %esi, %ecx328; X64-NEXT:    movl %edi, %eax329; X64-NEXT:    # kill: def $cl killed $cl killed $ecx330; X64-NEXT:    rolw %cl, %ax331; X64-NEXT:    # kill: def $ax killed $ax killed $eax332; X64-NEXT:    retq333	%shift.upgrd.5 = zext i8 %Amt to i16334	%B = shl i16 %A, %shift.upgrd.5335	%Amt2 = sub i8 16, %Amt336	%shift.upgrd.6 = zext i8 %Amt2 to i16337	%C = lshr i16 %A, %shift.upgrd.6338	%D = or i16 %B, %C339	ret i16 %D340}341 342define i16 @rotr16(i16 %A, i8 %Amt) nounwind {343; X86-LABEL: rotr16:344; X86:       # %bb.0:345; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx346; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax347; X86-NEXT:    rorw %cl, %ax348; X86-NEXT:    retl349;350; X64-LABEL: rotr16:351; X64:       # %bb.0:352; X64-NEXT:    movl %esi, %ecx353; X64-NEXT:    movl %edi, %eax354; X64-NEXT:    # kill: def $cl killed $cl killed $ecx355; X64-NEXT:    rorw %cl, %ax356; X64-NEXT:    # kill: def $ax killed $ax killed $eax357; X64-NEXT:    retq358	%shift.upgrd.7 = zext i8 %Amt to i16359	%B = lshr i16 %A, %shift.upgrd.7360	%Amt2 = sub i8 16, %Amt361	%shift.upgrd.8 = zext i8 %Amt2 to i16362	%C = shl i16 %A, %shift.upgrd.8363	%D = or i16 %B, %C364	ret i16 %D365}366 367define i16 @rotli16(i16 %A) nounwind {368; X86-LABEL: rotli16:369; X86:       # %bb.0:370; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax371; X86-NEXT:    rolw $5, %ax372; X86-NEXT:    retl373;374; X64-LABEL: rotli16:375; X64:       # %bb.0:376; X64-NEXT:    movl %edi, %eax377; X64-NEXT:    rolw $5, %ax378; X64-NEXT:    # kill: def $ax killed $ax killed $eax379; X64-NEXT:    retq380	%B = shl i16 %A, 5381	%C = lshr i16 %A, 11382	%D = or i16 %B, %C383	ret i16 %D384}385 386define i16 @rotri16(i16 %A) nounwind {387; X86-LABEL: rotri16:388; X86:       # %bb.0:389; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax390; X86-NEXT:    rolw $11, %ax391; X86-NEXT:    retl392;393; X64-LABEL: rotri16:394; X64:       # %bb.0:395; X64-NEXT:    movl %edi, %eax396; X64-NEXT:    rolw $11, %ax397; X64-NEXT:    # kill: def $ax killed $ax killed $eax398; X64-NEXT:    retq399	%B = lshr i16 %A, 5400	%C = shl i16 %A, 11401	%D = or i16 %B, %C402	ret i16 %D403}404 405define i16 @rotl1_16(i16 %A) nounwind {406; X86-LABEL: rotl1_16:407; X86:       # %bb.0:408; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax409; X86-NEXT:    rolw %ax410; X86-NEXT:    retl411;412; X64-LABEL: rotl1_16:413; X64:       # %bb.0:414; X64-NEXT:    movl %edi, %eax415; X64-NEXT:    rolw %ax416; X64-NEXT:    # kill: def $ax killed $ax killed $eax417; X64-NEXT:    retq418	%B = shl i16 %A, 1419	%C = lshr i16 %A, 15420	%D = or i16 %B, %C421	ret i16 %D422}423 424define i16 @rotr1_16(i16 %A) nounwind {425; X86-LABEL: rotr1_16:426; X86:       # %bb.0:427; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax428; X86-NEXT:    rorw %ax429; X86-NEXT:    retl430;431; X64-LABEL: rotr1_16:432; X64:       # %bb.0:433; X64-NEXT:    movl %edi, %eax434; X64-NEXT:    rorw %ax435; X64-NEXT:    # kill: def $ax killed $ax killed $eax436; X64-NEXT:    retq437	%B = lshr i16 %A, 1438	%C = shl i16 %A, 15439	%D = or i16 %B, %C440	ret i16 %D441}442 443define i8 @rotl8(i8 %A, i8 %Amt) nounwind {444; X86-LABEL: rotl8:445; X86:       # %bb.0:446; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx447; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax448; X86-NEXT:    rolb %cl, %al449; X86-NEXT:    retl450;451; X64-LABEL: rotl8:452; X64:       # %bb.0:453; X64-NEXT:    movl %esi, %ecx454; X64-NEXT:    movl %edi, %eax455; X64-NEXT:    # kill: def $cl killed $cl killed $ecx456; X64-NEXT:    rolb %cl, %al457; X64-NEXT:    # kill: def $al killed $al killed $eax458; X64-NEXT:    retq459	%B = shl i8 %A, %Amt460	%Amt2 = sub i8 8, %Amt461	%C = lshr i8 %A, %Amt2462	%D = or i8 %B, %C463	ret i8 %D464}465 466define i8 @rotr8(i8 %A, i8 %Amt) nounwind {467; X86-LABEL: rotr8:468; X86:       # %bb.0:469; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx470; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax471; X86-NEXT:    rorb %cl, %al472; X86-NEXT:    retl473;474; X64-LABEL: rotr8:475; X64:       # %bb.0:476; X64-NEXT:    movl %esi, %ecx477; X64-NEXT:    movl %edi, %eax478; X64-NEXT:    # kill: def $cl killed $cl killed $ecx479; X64-NEXT:    rorb %cl, %al480; X64-NEXT:    # kill: def $al killed $al killed $eax481; X64-NEXT:    retq482	%B = lshr i8 %A, %Amt483	%Amt2 = sub i8 8, %Amt484	%C = shl i8 %A, %Amt2485	%D = or i8 %B, %C486	ret i8 %D487}488 489define i8 @rotli8(i8 %A) nounwind {490; X86-LABEL: rotli8:491; X86:       # %bb.0:492; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax493; X86-NEXT:    rolb $5, %al494; X86-NEXT:    retl495;496; X64-LABEL: rotli8:497; X64:       # %bb.0:498; X64-NEXT:    movl %edi, %eax499; X64-NEXT:    rolb $5, %al500; X64-NEXT:    # kill: def $al killed $al killed $eax501; X64-NEXT:    retq502	%B = shl i8 %A, 5503	%C = lshr i8 %A, 3504	%D = or i8 %B, %C505	ret i8 %D506}507 508define i8 @rotri8(i8 %A) nounwind {509; X86-LABEL: rotri8:510; X86:       # %bb.0:511; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax512; X86-NEXT:    rolb $3, %al513; X86-NEXT:    retl514;515; X64-LABEL: rotri8:516; X64:       # %bb.0:517; X64-NEXT:    movl %edi, %eax518; X64-NEXT:    rolb $3, %al519; X64-NEXT:    # kill: def $al killed $al killed $eax520; X64-NEXT:    retq521	%B = lshr i8 %A, 5522	%C = shl i8 %A, 3523	%D = or i8 %B, %C524	ret i8 %D525}526 527define i8 @rotl1_8(i8 %A) nounwind {528; X86-LABEL: rotl1_8:529; X86:       # %bb.0:530; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax531; X86-NEXT:    rolb %al532; X86-NEXT:    retl533;534; X64-LABEL: rotl1_8:535; X64:       # %bb.0:536; X64-NEXT:    movl %edi, %eax537; X64-NEXT:    rolb %al538; X64-NEXT:    # kill: def $al killed $al killed $eax539; X64-NEXT:    retq540	%B = shl i8 %A, 1541	%C = lshr i8 %A, 7542	%D = or i8 %B, %C543	ret i8 %D544}545 546define i8 @rotr1_8(i8 %A) nounwind {547; X86-LABEL: rotr1_8:548; X86:       # %bb.0:549; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax550; X86-NEXT:    rorb %al551; X86-NEXT:    retl552;553; X64-LABEL: rotr1_8:554; X64:       # %bb.0:555; X64-NEXT:    movl %edi, %eax556; X64-NEXT:    rorb %al557; X64-NEXT:    # kill: def $al killed $al killed $eax558; X64-NEXT:    retq559	%B = lshr i8 %A, 1560	%C = shl i8 %A, 7561	%D = or i8 %B, %C562	ret i8 %D563}564 565define void @rotr1_64_mem(ptr %Aptr) nounwind {566; X86-LABEL: rotr1_64_mem:567; X86:       # %bb.0:568; X86-NEXT:    pushl %esi569; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax570; X86-NEXT:    movl (%eax), %ecx571; X86-NEXT:    movl 4(%eax), %edx572; X86-NEXT:    movl %ecx, %esi573; X86-NEXT:    shldl $31, %edx, %esi574; X86-NEXT:    shldl $31, %ecx, %edx575; X86-NEXT:    movl %edx, (%eax)576; X86-NEXT:    movl %esi, 4(%eax)577; X86-NEXT:    popl %esi578; X86-NEXT:    retl579;580; X64-LABEL: rotr1_64_mem:581; X64:       # %bb.0:582; X64-NEXT:    rorq (%rdi)583; X64-NEXT:    retq584 585  %A = load i64, ptr%Aptr586  %B = shl i64 %A, 63587  %C = lshr i64 %A, 1588  %D = or i64 %B, %C589  store i64 %D, ptr %Aptr590  ret void591}592 593define void @rotr1_32_mem(ptr %Aptr) nounwind {594; X86-LABEL: rotr1_32_mem:595; X86:       # %bb.0:596; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax597; X86-NEXT:    rorl (%eax)598; X86-NEXT:    retl599;600; X64-LABEL: rotr1_32_mem:601; X64:       # %bb.0:602; X64-NEXT:    rorl (%rdi)603; X64-NEXT:    retq604  %A = load i32, ptr%Aptr605  %B = shl i32 %A, 31606  %C = lshr i32 %A, 1607  %D = or i32 %B, %C608  store i32 %D, ptr %Aptr609  ret void610}611 612define void @rotr1_16_mem(ptr %Aptr) nounwind {613; X86-LABEL: rotr1_16_mem:614; X86:       # %bb.0:615; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax616; X86-NEXT:    rorw (%eax)617; X86-NEXT:    retl618;619; X64-LABEL: rotr1_16_mem:620; X64:       # %bb.0:621; X64-NEXT:    rorw (%rdi)622; X64-NEXT:    retq623  %A = load i16, ptr%Aptr624  %B = shl i16 %A, 15625  %C = lshr i16 %A, 1626  %D = or i16 %B, %C627  store i16 %D, ptr %Aptr628  ret void629}630 631define void @rotr1_8_mem(ptr %Aptr) nounwind {632; X86-LABEL: rotr1_8_mem:633; X86:       # %bb.0:634; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax635; X86-NEXT:    rorb (%eax)636; X86-NEXT:    retl637;638; X64-LABEL: rotr1_8_mem:639; X64:       # %bb.0:640; X64-NEXT:    rorb (%rdi)641; X64-NEXT:    retq642  %A = load i8, ptr%Aptr643  %B = shl i8 %A, 7644  %C = lshr i8 %A, 1645  %D = or i8 %B, %C646  store i8 %D, ptr %Aptr647  ret void648}649 650define i64 @truncated_rot(i64 %x, i32 %amt) nounwind {651; X86-LABEL: truncated_rot:652; X86:       # %bb.0: # %entry653; X86-NEXT:    pushl %ebx654; X86-NEXT:    pushl %edi655; X86-NEXT:    pushl %esi656; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx657; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi658; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx659; X86-NEXT:    movl %esi, %eax660; X86-NEXT:    shll %cl, %eax661; X86-NEXT:    testb $32, %cl662; X86-NEXT:    movl $0, %edi663; X86-NEXT:    jne .LBB28_2664; X86-NEXT:  # %bb.1: # %entry665; X86-NEXT:    movl %eax, %edi666; X86-NEXT:  .LBB28_2: # %entry667; X86-NEXT:    movb $64, %dl668; X86-NEXT:    subb %cl, %dl669; X86-NEXT:    movl %ebx, %eax670; X86-NEXT:    movl %edx, %ecx671; X86-NEXT:    shrl %cl, %eax672; X86-NEXT:    shrdl %cl, %ebx, %esi673; X86-NEXT:    testb $32, %dl674; X86-NEXT:    jne .LBB28_4675; X86-NEXT:  # %bb.3: # %entry676; X86-NEXT:    movl %esi, %eax677; X86-NEXT:  .LBB28_4: # %entry678; X86-NEXT:    orl %edi, %eax679; X86-NEXT:    xorl %edx, %edx680; X86-NEXT:    popl %esi681; X86-NEXT:    popl %edi682; X86-NEXT:    popl %ebx683; X86-NEXT:    retl684;685; X64-LABEL: truncated_rot:686; X64:       # %bb.0: # %entry687; X64-NEXT:    movl %esi, %ecx688; X64-NEXT:    # kill: def $cl killed $cl killed $ecx689; X64-NEXT:    rolq %cl, %rdi690; X64-NEXT:    movl %edi, %eax691; X64-NEXT:    retq692entry:693  %sh_prom = zext i32 %amt to i64694  %shl = shl i64 %x, %sh_prom695  %sub = sub nsw i32 64, %amt696  %sh_prom1 = zext i32 %sub to i64697  %shr = lshr i64 %x, %sh_prom1698  %or = or i64 %shr, %shl699  %and = and i64 %or, 4294967295700  ret i64 %and701}702