brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · fb87583 Raw
152 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=X643 4declare i64 @llvm.fshl.i64(i64, i64, i64) nounwind readnone5declare i64 @llvm.fshr.i64(i64, i64, i64) nounwind readnone6 7define i64 @hoist_fshl_from_or(i64 %a, i64 %b, i64 %c, i64 %d, i64 %s) nounwind {8; X64-LABEL: hoist_fshl_from_or:9; X64:       # %bb.0:10; X64-NEXT:    movq %rdi, %rax11; X64-NEXT:    orq %rcx, %rsi12; X64-NEXT:    orq %rdx, %rax13; X64-NEXT:    movl %r8d, %ecx14; X64-NEXT:    shldq %cl, %rsi, %rax15; X64-NEXT:    retq16  %fshl.0 = call i64 @llvm.fshl.i64(i64 %a, i64 %b, i64 %s)17  %fshl.1 = call i64 @llvm.fshl.i64(i64 %c, i64 %d, i64 %s)18  %res = or i64 %fshl.0, %fshl.119  ret i64 %res20}21 22define i64 @hoist_fshl_from_and(i64 %a, i64 %b, i64 %c, i64 %d, i64 %s) nounwind {23; X64-LABEL: hoist_fshl_from_and:24; X64:       # %bb.0:25; X64-NEXT:    movq %rdi, %rax26; X64-NEXT:    andq %rcx, %rsi27; X64-NEXT:    andq %rdx, %rax28; X64-NEXT:    movl %r8d, %ecx29; X64-NEXT:    shldq %cl, %rsi, %rax30; X64-NEXT:    retq31  %fshl.0 = call i64 @llvm.fshl.i64(i64 %a, i64 %b, i64 %s)32  %fshl.1 = call i64 @llvm.fshl.i64(i64 %c, i64 %d, i64 %s)33  %res = and i64 %fshl.0, %fshl.134  ret i64 %res35}36 37define i64 @hoist_fshl_from_xor(i64 %a, i64 %b, i64 %c, i64 %d, i64 %s) nounwind {38; X64-LABEL: hoist_fshl_from_xor:39; X64:       # %bb.0:40; X64-NEXT:    movq %rdi, %rax41; X64-NEXT:    xorq %rcx, %rsi42; X64-NEXT:    xorq %rdx, %rax43; X64-NEXT:    movl %r8d, %ecx44; X64-NEXT:    shldq %cl, %rsi, %rax45; X64-NEXT:    retq46  %fshl.0 = call i64 @llvm.fshl.i64(i64 %a, i64 %b, i64 %s)47  %fshl.1 = call i64 @llvm.fshl.i64(i64 %c, i64 %d, i64 %s)48  %res = xor i64 %fshl.0, %fshl.149  ret i64 %res50}51 52define i64 @fshl_or_with_different_shift_value(i64 %a, i64 %b, i64 %c, i64 %d) nounwind {53; X64-LABEL: fshl_or_with_different_shift_value:54; X64:       # %bb.0:55; X64-NEXT:    movq %rdx, %rax56; X64-NEXT:    shldq $12, %rsi, %rdi57; X64-NEXT:    shldq $13, %rcx, %rax58; X64-NEXT:    orq %rdi, %rax59; X64-NEXT:    retq60  %fshl.0 = call i64 @llvm.fshl.i64(i64 %a, i64 %b, i64 12)61  %fshl.1 = call i64 @llvm.fshl.i64(i64 %c, i64 %d, i64 13)62  %res = or i64 %fshl.0, %fshl.163  ret i64 %res64}65 66define i64 @hoist_fshl_from_or_const_shift(i64 %a, i64 %b, i64 %c, i64 %d) nounwind {67; X64-LABEL: hoist_fshl_from_or_const_shift:68; X64:       # %bb.0:69; X64-NEXT:    movq %rdi, %rax70; X64-NEXT:    orq %rcx, %rsi71; X64-NEXT:    orq %rdx, %rax72; X64-NEXT:    shldq $15, %rsi, %rax73; X64-NEXT:    retq74  %fshl.0 = call i64 @llvm.fshl.i64(i64 %a, i64 %b, i64 15)75  %fshl.1 = call i64 @llvm.fshl.i64(i64 %c, i64 %d, i64 15)76  %res = or i64 %fshl.0, %fshl.177  ret i64 %res78}79 80define i64 @hoist_fshr_from_or(i64 %a, i64 %b, i64 %c, i64 %d, i64 %s) nounwind {81; X64-LABEL: hoist_fshr_from_or:82; X64:       # %bb.0:83; X64-NEXT:    movq %rsi, %rax84; X64-NEXT:    orq %rdx, %rdi85; X64-NEXT:    orq %rcx, %rax86; X64-NEXT:    movl %r8d, %ecx87; X64-NEXT:    shrdq %cl, %rdi, %rax88; X64-NEXT:    retq89  %fshr.0 = call i64 @llvm.fshr.i64(i64 %a, i64 %b, i64 %s)90  %fshr.1 = call i64 @llvm.fshr.i64(i64 %c, i64 %d, i64 %s)91  %res = or i64 %fshr.0, %fshr.192  ret i64 %res93}94 95define i64 @hoist_fshr_from_and(i64 %a, i64 %b, i64 %c, i64 %d, i64 %s) nounwind {96; X64-LABEL: hoist_fshr_from_and:97; X64:       # %bb.0:98; X64-NEXT:    movq %rsi, %rax99; X64-NEXT:    andq %rdx, %rdi100; X64-NEXT:    andq %rcx, %rax101; X64-NEXT:    movl %r8d, %ecx102; X64-NEXT:    shrdq %cl, %rdi, %rax103; X64-NEXT:    retq104  %fshr.0 = call i64 @llvm.fshr.i64(i64 %a, i64 %b, i64 %s)105  %fshr.1 = call i64 @llvm.fshr.i64(i64 %c, i64 %d, i64 %s)106  %res = and i64 %fshr.0, %fshr.1107  ret i64 %res108}109 110define i64 @hoist_fshr_from_xor(i64 %a, i64 %b, i64 %c, i64 %d, i64 %s) nounwind {111; X64-LABEL: hoist_fshr_from_xor:112; X64:       # %bb.0:113; X64-NEXT:    movq %rsi, %rax114; X64-NEXT:    xorq %rdx, %rdi115; X64-NEXT:    xorq %rcx, %rax116; X64-NEXT:    movl %r8d, %ecx117; X64-NEXT:    shrdq %cl, %rdi, %rax118; X64-NEXT:    retq119  %fshr.0 = call i64 @llvm.fshr.i64(i64 %a, i64 %b, i64 %s)120  %fshr.1 = call i64 @llvm.fshr.i64(i64 %c, i64 %d, i64 %s)121  %res = xor i64 %fshr.0, %fshr.1122  ret i64 %res123}124 125define i64 @fshr_or_with_different_shift_value(i64 %a, i64 %b, i64 %c, i64 %d) nounwind {126; X64-LABEL: fshr_or_with_different_shift_value:127; X64:       # %bb.0:128; X64-NEXT:    movq %rdx, %rax129; X64-NEXT:    shldq $52, %rsi, %rdi130; X64-NEXT:    shldq $51, %rcx, %rax131; X64-NEXT:    orq %rdi, %rax132; X64-NEXT:    retq133  %fshr.0 = call i64 @llvm.fshr.i64(i64 %a, i64 %b, i64 12)134  %fshr.1 = call i64 @llvm.fshr.i64(i64 %c, i64 %d, i64 13)135  %res = or i64 %fshr.0, %fshr.1136  ret i64 %res137}138 139define i64 @hoist_fshr_from_or_const_shift(i64 %a, i64 %b, i64 %c, i64 %d) nounwind {140; X64-LABEL: hoist_fshr_from_or_const_shift:141; X64:       # %bb.0:142; X64-NEXT:    movq %rdi, %rax143; X64-NEXT:    orq %rcx, %rsi144; X64-NEXT:    orl %edx, %eax145; X64-NEXT:    shldq $49, %rsi, %rax146; X64-NEXT:    retq147  %fshr.0 = call i64 @llvm.fshr.i64(i64 %a, i64 %b, i64 15)148  %fshr.1 = call i64 @llvm.fshr.i64(i64 %c, i64 %d, i64 15)149  %res = or i64 %fshr.0, %fshr.1150  ret i64 %res151}152