217 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s3 4; Utilize implicit zero-extension on x86-64 to eliminate explicit5; zero-extensions. Shrink 64-bit adds to 32-bit when the high6; 32-bits will be zeroed.7 8define void @bar(i64 %x, i64 %y, ptr %z) nounwind readnone {9; CHECK-LABEL: bar:10; CHECK: # %bb.0: # %entry11; CHECK-NEXT: addl %esi, %edi12; CHECK-NEXT: movq %rdi, (%rdx)13; CHECK-NEXT: retq14entry:15 %t0 = add i64 %x, %y16 %t1 = and i64 %t0, 429496729517 store i64 %t1, ptr %z18 ret void19}20define void @easy(i32 %x, i32 %y, ptr %z) nounwind readnone {21; CHECK-LABEL: easy:22; CHECK: # %bb.0: # %entry23; CHECK-NEXT: # kill: def $edi killed $edi def $rdi24; CHECK-NEXT: addl %esi, %edi25; CHECK-NEXT: movq %rdi, (%rdx)26; CHECK-NEXT: retq27entry:28 %t0 = add i32 %x, %y29 %tn = zext i32 %t0 to i6430 %t1 = and i64 %tn, 429496729531 store i64 %t1, ptr %z32 ret void33}34define void @cola(ptr%x, i64 %y, ptr %z, i64 %u) nounwind readnone {35; CHECK-LABEL: cola:36; CHECK: # %bb.0: # %entry37; CHECK-NEXT: addl (%rdi), %esi38; CHECK-NEXT: xorq %rcx, %rsi39; CHECK-NEXT: movq %rsi, (%rdx)40; CHECK-NEXT: retq41entry:42 %p = load i64, ptr %x43 %t0 = add i64 %p, %y44 %t1 = and i64 %t0, 429496729545 %t2 = xor i64 %t1, %u46 store i64 %t2, ptr %z47 ret void48}49define void @yaks(ptr%x, i64 %y, ptr %z, i64 %u) nounwind readnone {50; CHECK-LABEL: yaks:51; CHECK: # %bb.0: # %entry52; CHECK-NEXT: addl (%rdi), %esi53; CHECK-NEXT: xorl %esi, %ecx54; CHECK-NEXT: movq %rcx, (%rdx)55; CHECK-NEXT: retq56entry:57 %p = load i64, ptr %x58 %t0 = add i64 %p, %y59 %t1 = xor i64 %t0, %u60 %t2 = and i64 %t1, 429496729561 store i64 %t2, ptr %z62 ret void63}64define void @foo(ptr%x, ptr%y, ptr %z) nounwind readnone {65; CHECK-LABEL: foo:66; CHECK: # %bb.0: # %entry67; CHECK-NEXT: movl (%rdi), %eax68; CHECK-NEXT: addl (%rsi), %eax69; CHECK-NEXT: movq %rax, (%rdx)70; CHECK-NEXT: retq71entry:72 %a = load i64, ptr %x73 %b = load i64, ptr %y74 %t0 = add i64 %a, %b75 %t1 = and i64 %t0, 429496729576 store i64 %t1, ptr %z77 ret void78}79define void @avo(i64 %x, ptr %z, i64 %u) nounwind readnone {80; CHECK-LABEL: avo:81; CHECK: # %bb.0: # %entry82; CHECK-NEXT: addl $734847, %edi # imm = 0xB367F83; CHECK-NEXT: xorq %rdx, %rdi84; CHECK-NEXT: movq %rdi, (%rsi)85; CHECK-NEXT: retq86entry:87 %t0 = add i64 %x, 73484788 %t1 = and i64 %t0, 429496729589 %t2 = xor i64 %t1, %u90 store i64 %t2, ptr %z91 ret void92}93define void @phe(i64 %x, ptr %z, i64 %u) nounwind readnone {94; CHECK-LABEL: phe:95; CHECK: # %bb.0: # %entry96; CHECK-NEXT: addl $734847, %edi # imm = 0xB367F97; CHECK-NEXT: xorl %edi, %edx98; CHECK-NEXT: movq %rdx, (%rsi)99; CHECK-NEXT: retq100entry:101 %t0 = add i64 %x, 734847102 %t1 = xor i64 %t0, %u103 %t2 = and i64 %t1, 4294967295104 store i64 %t2, ptr %z105 ret void106}107define void @oze(i64 %y, ptr %z) nounwind readnone {108; CHECK-LABEL: oze:109; CHECK: # %bb.0: # %entry110; CHECK-NEXT: incl %edi111; CHECK-NEXT: movq %rdi, (%rsi)112; CHECK-NEXT: retq113entry:114 %t0 = add i64 %y, 1115 %t1 = and i64 %t0, 4294967295116 store i64 %t1, ptr %z117 ret void118}119 120define void @sbar(i64 %x, i64 %y, ptr %z) nounwind readnone {121; CHECK-LABEL: sbar:122; CHECK: # %bb.0: # %entry123; CHECK-NEXT: subl %esi, %edi124; CHECK-NEXT: movq %rdi, (%rdx)125; CHECK-NEXT: retq126entry:127 %t0 = sub i64 %x, %y128 %t1 = and i64 %t0, 4294967295129 store i64 %t1, ptr %z130 ret void131}132define void @seasy(i32 %x, i32 %y, ptr %z) nounwind readnone {133; CHECK-LABEL: seasy:134; CHECK: # %bb.0: # %entry135; CHECK-NEXT: # kill: def $edi killed $edi def $rdi136; CHECK-NEXT: subl %esi, %edi137; CHECK-NEXT: movq %rdi, (%rdx)138; CHECK-NEXT: retq139entry:140 %t0 = sub i32 %x, %y141 %tn = zext i32 %t0 to i64142 %t1 = and i64 %tn, 4294967295143 store i64 %t1, ptr %z144 ret void145}146define void @scola(ptr%x, i64 %y, ptr %z, i64 %u) nounwind readnone {147; CHECK-LABEL: scola:148; CHECK: # %bb.0: # %entry149; CHECK-NEXT: movl (%rdi), %eax150; CHECK-NEXT: subl %esi, %eax151; CHECK-NEXT: xorq %rcx, %rax152; CHECK-NEXT: movq %rax, (%rdx)153; CHECK-NEXT: retq154entry:155 %p = load i64, ptr %x156 %t0 = sub i64 %p, %y157 %t1 = and i64 %t0, 4294967295158 %t2 = xor i64 %t1, %u159 store i64 %t2, ptr %z160 ret void161}162define void @syaks(ptr%x, i64 %y, ptr %z, i64 %u) nounwind readnone {163; CHECK-LABEL: syaks:164; CHECK: # %bb.0: # %entry165; CHECK-NEXT: movl (%rdi), %eax166; CHECK-NEXT: subl %esi, %eax167; CHECK-NEXT: xorl %eax, %ecx168; CHECK-NEXT: movq %rcx, (%rdx)169; CHECK-NEXT: retq170entry:171 %p = load i64, ptr %x172 %t0 = sub i64 %p, %y173 %t1 = xor i64 %t0, %u174 %t2 = and i64 %t1, 4294967295175 store i64 %t2, ptr %z176 ret void177}178define void @sfoo(ptr%x, ptr%y, ptr %z) nounwind readnone {179; CHECK-LABEL: sfoo:180; CHECK: # %bb.0: # %entry181; CHECK-NEXT: movl (%rdi), %eax182; CHECK-NEXT: subl (%rsi), %eax183; CHECK-NEXT: movq %rax, (%rdx)184; CHECK-NEXT: retq185entry:186 %a = load i64, ptr %x187 %b = load i64, ptr %y188 %t0 = sub i64 %a, %b189 %t1 = and i64 %t0, 4294967295190 store i64 %t1, ptr %z191 ret void192}193define void @swya(i64 %y, ptr %z) nounwind readnone {194; CHECK-LABEL: swya:195; CHECK: # %bb.0: # %entry196; CHECK-NEXT: negl %edi197; CHECK-NEXT: movq %rdi, (%rsi)198; CHECK-NEXT: retq199entry:200 %t0 = sub i64 0, %y201 %t1 = and i64 %t0, 4294967295202 store i64 %t1, ptr %z203 ret void204}205define void @soze(i64 %y, ptr %z) nounwind readnone {206; CHECK-LABEL: soze:207; CHECK: # %bb.0: # %entry208; CHECK-NEXT: decl %edi209; CHECK-NEXT: movq %rdi, (%rsi)210; CHECK-NEXT: retq211entry:212 %t0 = sub i64 %y, 1213 %t1 = and i64 %t0, 4294967295214 store i64 %t1, ptr %z215 ret void216}217