brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · edc36fd Raw
162 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1,-avx,+rdrnd,+rdseed | FileCheck %s3 4define i32 @foo(<2 x i64> %c, i32 %a, i32 %b) {5; CHECK-LABEL: foo:6; CHECK:       # %bb.0:7; CHECK-NEXT:    movl %edi, %eax8; CHECK-NEXT:    ptest %xmm0, %xmm09; CHECK-NEXT:    cmovnel %esi, %eax10; CHECK-NEXT:    retq11  %t1 = call i32 @llvm.x86.sse41.ptestz(<2 x i64> %c, <2 x i64> %c)12  %t2 = icmp ne i32 %t1, 013  %t3 = select i1 %t2, i32 %a, i32 %b14  ret i32 %t315}16 17define i32 @bar(<2 x i64> %c) {18; CHECK-LABEL: bar:19; CHECK:       # %bb.0: # %entry20; CHECK-NEXT:    ptest %xmm0, %xmm021; CHECK-NEXT:    jne .LBB1_222; CHECK-NEXT:  # %bb.1: # %if-true-block23; CHECK-NEXT:    xorl %eax, %eax24; CHECK-NEXT:    retq25; CHECK-NEXT:  .LBB1_2: # %endif-block26; CHECK-NEXT:    movl $1, %eax27; CHECK-NEXT:    retq28entry:29  %0 = call i32 @llvm.x86.sse41.ptestz(<2 x i64> %c, <2 x i64> %c)30  %1 = icmp ne i32 %0, 031  br i1 %1, label %if-true-block, label %endif-block32if-true-block:33  ret i32 034endif-block:35  ret i32 136}37 38define i32 @bax(<2 x i64> %c) {39; CHECK-LABEL: bax:40; CHECK:       # %bb.0:41; CHECK-NEXT:    xorl %eax, %eax42; CHECK-NEXT:    ptest %xmm0, %xmm043; CHECK-NEXT:    sete %al44; CHECK-NEXT:    retq45  %t1 = call i32 @llvm.x86.sse41.ptestz(<2 x i64> %c, <2 x i64> %c)46  %t2 = icmp eq i32 %t1, 147  %t3 = zext i1 %t2 to i3248  ret i32 %t349}50 51define i16 @rnd16(i16 %arg) nounwind {52; CHECK-LABEL: rnd16:53; CHECK:       # %bb.0:54; CHECK-NEXT:    xorl %eax, %eax55; CHECK-NEXT:    rdrandw %cx56; CHECK-NEXT:    cmovbl %edi, %eax57; CHECK-NEXT:    addl %ecx, %eax58; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax59; CHECK-NEXT:    retq60  %1 = tail call { i16, i32 } @llvm.x86.rdrand.16() nounwind61  %2 = extractvalue { i16, i32 } %1, 062  %3 = extractvalue { i16, i32 } %1, 163  %4 = icmp eq i32 %3, 064  %5 = select i1 %4, i16 0, i16 %arg65  %6 = add i16 %5, %266  ret i16 %667}68 69define i32 @rnd32(i32 %arg) nounwind {70; CHECK-LABEL: rnd32:71; CHECK:       # %bb.0:72; CHECK-NEXT:    xorl %eax, %eax73; CHECK-NEXT:    rdrandl %ecx74; CHECK-NEXT:    cmovbl %edi, %eax75; CHECK-NEXT:    addl %ecx, %eax76; CHECK-NEXT:    retq77  %1 = tail call { i32, i32 } @llvm.x86.rdrand.32() nounwind78  %2 = extractvalue { i32, i32 } %1, 079  %3 = extractvalue { i32, i32 } %1, 180  %4 = icmp eq i32 %3, 081  %5 = select i1 %4, i32 0, i32 %arg82  %6 = add i32 %5, %283  ret i32 %684}85 86define i64 @rnd64(i64 %arg) nounwind {87; CHECK-LABEL: rnd64:88; CHECK:       # %bb.0:89; CHECK-NEXT:    xorl %eax, %eax90; CHECK-NEXT:    rdrandq %rcx91; CHECK-NEXT:    cmovbq %rdi, %rax92; CHECK-NEXT:    addq %rcx, %rax93; CHECK-NEXT:    retq94  %1 = tail call { i64, i32 } @llvm.x86.rdrand.64() nounwind95  %2 = extractvalue { i64, i32 } %1, 096  %3 = extractvalue { i64, i32 } %1, 197  %4 = icmp eq i32 %3, 098  %5 = select i1 %4, i64 0, i64 %arg99  %6 = add i64 %5, %2100  ret i64 %6101}102 103define i16 @seed16(i16 %arg) nounwind {104; CHECK-LABEL: seed16:105; CHECK:       # %bb.0:106; CHECK-NEXT:    xorl %eax, %eax107; CHECK-NEXT:    rdseedw %cx108; CHECK-NEXT:    cmovbl %edi, %eax109; CHECK-NEXT:    addl %ecx, %eax110; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax111; CHECK-NEXT:    retq112  %1 = tail call { i16, i32 } @llvm.x86.rdseed.16() nounwind113  %2 = extractvalue { i16, i32 } %1, 0114  %3 = extractvalue { i16, i32 } %1, 1115  %4 = icmp eq i32 %3, 0116  %5 = select i1 %4, i16 0, i16 %arg117  %6 = add i16 %5, %2118  ret i16 %6119}120 121define i32 @seed32(i32 %arg) nounwind {122; CHECK-LABEL: seed32:123; CHECK:       # %bb.0:124; CHECK-NEXT:    xorl %eax, %eax125; CHECK-NEXT:    rdseedl %ecx126; CHECK-NEXT:    cmovbl %edi, %eax127; CHECK-NEXT:    addl %ecx, %eax128; CHECK-NEXT:    retq129  %1 = tail call { i32, i32 } @llvm.x86.rdseed.32() nounwind130  %2 = extractvalue { i32, i32 } %1, 0131  %3 = extractvalue { i32, i32 } %1, 1132  %4 = icmp eq i32 %3, 0133  %5 = select i1 %4, i32 0, i32 %arg134  %6 = add i32 %5, %2135  ret i32 %6136}137 138define i64 @seed64(i64 %arg) nounwind {139; CHECK-LABEL: seed64:140; CHECK:       # %bb.0:141; CHECK-NEXT:    xorl %eax, %eax142; CHECK-NEXT:    rdseedq %rcx143; CHECK-NEXT:    cmovbq %rdi, %rax144; CHECK-NEXT:    addq %rcx, %rax145; CHECK-NEXT:    retq146  %1 = tail call { i64, i32 } @llvm.x86.rdseed.64() nounwind147  %2 = extractvalue { i64, i32 } %1, 0148  %3 = extractvalue { i64, i32 } %1, 1149  %4 = icmp eq i32 %3, 0150  %5 = select i1 %4, i64 0, i64 %arg151  %6 = add i64 %5, %2152  ret i64 %6153}154 155declare i32 @llvm.x86.sse41.ptestz(<2 x i64>, <2 x i64>) nounwind readnone156declare { i16, i32 } @llvm.x86.rdrand.16() nounwind157declare { i32, i32 } @llvm.x86.rdrand.32() nounwind158declare { i64, i32 } @llvm.x86.rdrand.64() nounwind159declare { i16, i32 } @llvm.x86.rdseed.16() nounwind160declare { i32, i32 } @llvm.x86.rdseed.32() nounwind161declare { i64, i32 } @llvm.x86.rdseed.64() nounwind162