brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.8 KiB · 3eaa06b Raw
269 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd -verify-machineinstrs | FileCheck %s3 4define i16 @shrd16rrcl(i16 noundef %a, i16 noundef %b, i8 %cl) {5; CHECK-LABEL: shrd16rrcl:6; CHECK:       # %bb.0: # %entry7; CHECK-NEXT:    andb $15, %dl, %cl8; CHECK-NEXT:    shrdw %cl, %di, %si, %ax9; CHECK-NEXT:    retq10entry:11    %clin = sext i8 %cl to i1612    %shrd = call i16 @llvm.fshr.i16(i16 %a, i16 %b, i16 %clin)13    ret i16 %shrd14}15 16define i16 @shrd16rrcl_mask(i16 noundef %a, i16 noundef %b, i8 %cl) {17; CHECK-LABEL: shrd16rrcl_mask:18; CHECK:       # %bb.0: # %entry19; CHECK-NEXT:    andb $15, %dl, %cl20; CHECK-NEXT:    shrdw %cl, %di, %si, %ax21; CHECK-NEXT:    retq22entry:23    %clin = sext i8 %cl to i1624    %shamt = and i16 %clin, 3125    %shrd = call i16 @llvm.fshr.i16(i16 %a, i16 %b, i16 %shamt)26    ret i16 %shrd27}28 29define i32 @shrd32rrcl(i32 noundef %a, i32 noundef %b, i8 %cl) {30; CHECK-LABEL: shrd32rrcl:31; CHECK:       # %bb.0: # %entry32; CHECK-NEXT:    movl %edx, %ecx33; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx34; CHECK-NEXT:    shrdl %cl, %edi, %esi, %eax35; CHECK-NEXT:    retq36entry:37    %clin = sext i8 %cl to i3238    %shrd = call i32 @llvm.fshr.i32(i32 %a, i32 %b, i32 %clin)39    ret i32 %shrd40}41 42define i32 @shrd32rrcl_mask(i32 noundef %a, i32 noundef %b, i8 %cl) {43; CHECK-LABEL: shrd32rrcl_mask:44; CHECK:       # %bb.0: # %entry45; CHECK-NEXT:    movl %edx, %ecx46; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx47; CHECK-NEXT:    shrdl %cl, %edi, %esi, %eax48; CHECK-NEXT:    retq49entry:50    %clin = sext i8 %cl to i3251    %shamt = and i32 %clin, 3152    %shrd = call i32 @llvm.fshr.i32(i32 %a, i32 %b, i32 %shamt)53    ret i32 %shrd54}55 56define i64 @shrd64rrcl(i64 noundef %a, i64 noundef %b, i8 %cl) {57; CHECK-LABEL: shrd64rrcl:58; CHECK:       # %bb.0: # %entry59; CHECK-NEXT:    movl %edx, %ecx60; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx61; CHECK-NEXT:    shrdq %cl, %rdi, %rsi, %rax62; CHECK-NEXT:    retq63entry:64    %clin = sext i8 %cl to i6465    %shrd = call i64 @llvm.fshr.i64(i64 %a, i64 %b, i64 %clin)66    ret i64 %shrd67}68 69define i64 @shrd64rrcl_mask(i64 noundef %a, i64 noundef %b, i8 %cl) {70; CHECK-LABEL: shrd64rrcl_mask:71; CHECK:       # %bb.0: # %entry72; CHECK-NEXT:    movl %edx, %ecx73; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx74; CHECK-NEXT:    shrdq %cl, %rdi, %rsi, %rax75; CHECK-NEXT:    retq76entry:77    %clin = sext i8 %cl to i6478    %shamt = and i64 %clin, 6379    %shrd = call i64 @llvm.fshr.i64(i64 %a, i64 %b, i64 %shamt)80    ret i64 %shrd81}82 83define i16 @shrd16rri8(i16 noundef %a, i16 noundef %b) {84; CHECK-LABEL: shrd16rri8:85; CHECK:       # %bb.0: # %entry86; CHECK-NEXT:    shrdw $12, %di, %si, %ax87; CHECK-NEXT:    retq88entry:89    %shrd = call i16 @llvm.fshr.i16(i16 %a, i16 %b, i16 12)90    ret i16 %shrd91}92 93define i32 @shrd32rri8(i32 noundef %a, i32 noundef %b) {94; CHECK-LABEL: shrd32rri8:95; CHECK:       # %bb.0: # %entry96; CHECK-NEXT:    shrdl $12, %edi, %esi, %eax97; CHECK-NEXT:    retq98entry:99    %shrd = call i32 @llvm.fshr.i32(i32 %a, i32 %b, i32 12)100    ret i32 %shrd101}102 103define i64 @shrd64rri8(i64 noundef %a, i64 noundef %b) {104; CHECK-LABEL: shrd64rri8:105; CHECK:       # %bb.0: # %entry106; CHECK-NEXT:    shrdq $12, %rdi, %rsi, %rax107; CHECK-NEXT:    retq108entry:109    %shrd = call i64 @llvm.fshr.i64(i64 %a, i64 %b, i64 12)110    ret i64 %shrd111}112 113define i16 @shrd16mrcl(ptr %ptr, i16 noundef %b, i8 %cl) {114; CHECK-LABEL: shrd16mrcl:115; CHECK:       # %bb.0: # %entry116; CHECK-NEXT:    movzwl (%rdi), %eax117; CHECK-NEXT:    andb $15, %dl, %cl118; CHECK-NEXT:    shrdw %cl, %ax, %si, %ax119; CHECK-NEXT:    retq120entry:121    %a = load i16, ptr %ptr122    %clin = sext i8 %cl to i16123    %shrd = call i16 @llvm.fshr.i16(i16 %a, i16 %b, i16 %clin)124    ret i16 %shrd125}126 127define i32 @shrd32mrcl(ptr %ptr, i32 noundef %b, i8 %cl) {128; CHECK-LABEL: shrd32mrcl:129; CHECK:       # %bb.0: # %entry130; CHECK-NEXT:    movl %edx, %ecx131; CHECK-NEXT:    movl (%rdi), %eax132; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx133; CHECK-NEXT:    shrdl %cl, %eax, %esi, %eax134; CHECK-NEXT:    retq135entry:136    %a = load i32, ptr %ptr137    %clin = sext i8 %cl to i32138    %shrd = call i32 @llvm.fshr.i32(i32 %a, i32 %b, i32 %clin)139    ret i32 %shrd140}141 142define i64 @shrd64mrcl(ptr %ptr, i64 noundef %b, i8 %cl) {143; CHECK-LABEL: shrd64mrcl:144; CHECK:       # %bb.0: # %entry145; CHECK-NEXT:    movl %edx, %ecx146; CHECK-NEXT:    movq (%rdi), %rax147; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx148; CHECK-NEXT:    shrdq %cl, %rax, %rsi, %rax149; CHECK-NEXT:    retq150entry:151    %a = load i64, ptr %ptr152    %clin = sext i8 %cl to i64153    %shrd = call i64 @llvm.fshr.i64(i64 %a, i64 %b, i64 %clin)154    ret i64 %shrd155}156 157define i16 @shrd16mri8(ptr %ptr, i16 noundef %b) {158; CHECK-LABEL: shrd16mri8:159; CHECK:       # %bb.0: # %entry160; CHECK-NEXT:    shldw $4, %si, (%rdi), %ax161; CHECK-NEXT:    retq162entry:163    %a = load i16, ptr %ptr164    %shrd = call i16 @llvm.fshr.i16(i16 %a, i16 %b, i16 12)165    ret i16 %shrd166}167 168define i32 @shrd32mri8(ptr %ptr, i32 noundef %b) {169; CHECK-LABEL: shrd32mri8:170; CHECK:       # %bb.0: # %entry171; CHECK-NEXT:    shldl $20, %esi, (%rdi), %eax172; CHECK-NEXT:    retq173entry:174    %a = load i32, ptr %ptr175    %shrd = call i32 @llvm.fshr.i32(i32 %a, i32 %b, i32 12)176    ret i32 %shrd177}178 179define i64 @shrd64mri8(ptr %ptr, i64 noundef %b) {180; CHECK-LABEL: shrd64mri8:181; CHECK:       # %bb.0: # %entry182; CHECK-NEXT:    shldq $52, %rsi, (%rdi), %rax183; CHECK-NEXT:    retq184entry:185    %a = load i64, ptr %ptr186    %shrd = call i64 @llvm.fshr.i64(i64 %a, i64 %b, i64 12)187    ret i64 %shrd188}189 190define void @shrd16mrcl_legacy(ptr %ptr, i16 noundef %b, i8 %cl) {191; CHECK-LABEL: shrd16mrcl_legacy:192; CHECK:       # %bb.0: # %entry193; CHECK-NEXT:    andb $15, %dl, %cl194; CHECK-NEXT:    shrdw %cl, %si, (%rdi)195; CHECK-NEXT:    retq196entry:197    %a = load i16, ptr %ptr198    %clin = sext i8 %cl to i16199    %shrd = call i16 @llvm.fshr.i16(i16 %b, i16 %a, i16 %clin)200    store i16 %shrd, ptr %ptr201    ret void202}203 204define void @shrd32mrcl_legacy(ptr %ptr, i32 noundef %b, i8 %cl) {205; CHECK-LABEL: shrd32mrcl_legacy:206; CHECK:       # %bb.0: # %entry207; CHECK-NEXT:    movl %edx, %ecx208; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx209; CHECK-NEXT:    shrdl %cl, %esi, (%rdi)210; CHECK-NEXT:    retq211entry:212    %a = load i32, ptr %ptr213    %clin = sext i8 %cl to i32214    %shrd = call i32 @llvm.fshr.i32(i32 %b, i32 %a, i32 %clin)215    store i32 %shrd, ptr %ptr216    ret void217}218 219define void @shrd64mrcl_legacy(ptr %ptr, i64 noundef %b, i8 %cl) {220; CHECK-LABEL: shrd64mrcl_legacy:221; CHECK:       # %bb.0: # %entry222; CHECK-NEXT:    movl %edx, %ecx223; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx224; CHECK-NEXT:    shrdq %cl, %rsi, (%rdi)225; CHECK-NEXT:    retq226entry:227    %a = load i64, ptr %ptr228    %clin = sext i8 %cl to i64229    %shrd = call i64 @llvm.fshr.i64(i64 %b, i64 %a, i64 %clin)230    store i64 %shrd, ptr %ptr231    ret void232}233 234define void @shrd16mri8_legacy(ptr %ptr, i16 noundef %b) {235; CHECK-LABEL: shrd16mri8_legacy:236; CHECK:       # %bb.0: # %entry237; CHECK-NEXT:    shrdw $12, %si, (%rdi)238; CHECK-NEXT:    retq239entry:240    %a = load i16, ptr %ptr241    %shrd = call i16 @llvm.fshr.i16(i16 %b, i16 %a, i16 12)242    store i16 %shrd, ptr %ptr243    ret void244}245 246define void @shrd32mri8_legacy(ptr %ptr, i32 noundef %b) {247; CHECK-LABEL: shrd32mri8_legacy:248; CHECK:       # %bb.0: # %entry249; CHECK-NEXT:    shrdl $12, %esi, (%rdi)250; CHECK-NEXT:    retq251entry:252    %a = load i32, ptr %ptr253    %shrd = call i32 @llvm.fshr.i32(i32 %b, i32 %a, i32 12)254    store i32 %shrd, ptr %ptr255    ret void256}257 258define void @shrd64mri8_legacy(ptr %ptr, i64 noundef %b) {259; CHECK-LABEL: shrd64mri8_legacy:260; CHECK:       # %bb.0: # %entry261; CHECK-NEXT:    shrdq $12, %rsi, (%rdi)262; CHECK-NEXT:    retq263entry:264    %a = load i64, ptr %ptr265    %shrd = call i64 @llvm.fshr.i64(i64 %b, i64 %a, i64 12)266    store i64 %shrd, ptr %ptr267    ret void268}269