1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2; RUN: llc < %s -mtriple=avr | FileCheck %s 3; RUN: llc < %s -mtriple=avr -mattr=+avrtiny | FileCheck --check-prefix=TINY %s 4 5define i8 @rol8(i8 %val, i8 %amt) { 6; CHECK-LABEL: rol8: 7; CHECK: ; %bb.0: 8; CHECK-NEXT: andi r22, 7 9; CHECK-NEXT: dec r22 10; CHECK-NEXT: brmi .LBB0_2 11; CHECK-NEXT: .LBB0_1: ; =>This Inner Loop Header: Depth=1 12; CHECK-NEXT: lsl r24 13; CHECK-NEXT: adc r24, r1 14; CHECK-NEXT: dec r22 15; CHECK-NEXT: brpl .LBB0_1 16; CHECK-NEXT: .LBB0_2: 17; CHECK-NEXT: ret 18; 19; TINY-LABEL: rol8: 20; TINY: ; %bb.0: 21; TINY-NEXT: andi r22, 7 22; TINY-NEXT: dec r22 23; TINY-NEXT: brmi .LBB0_2 24; TINY-NEXT: .LBB0_1: ; =>This Inner Loop Header: Depth=1 25; TINY-NEXT: lsl r24 26; TINY-NEXT: adc r24, r17 27; TINY-NEXT: dec r22 28; TINY-NEXT: brpl .LBB0_1 29; TINY-NEXT: .LBB0_2: 30; TINY-NEXT: ret 31 %mod = urem i8 %amt, 8 32 %inv = sub i8 8, %mod 33 %parta = shl i8 %val, %mod 34 %partb = lshr i8 %val, %inv 35 %rotl = or i8 %parta, %partb 36 ret i8 %rotl 37} 38 39 40define i8 @ror8(i8 %val, i8 %amt) { 41; CHECK-LABEL: ror8: 42; CHECK: ; %bb.0: 43; CHECK-NEXT: andi r22, 7 44; CHECK-NEXT: dec r22 45; CHECK-NEXT: brmi .LBB1_2 46; CHECK-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1 47; CHECK-NEXT: bst r24, 0 48; CHECK-NEXT: ror r24 49; CHECK-NEXT: bld r24, 7 50; CHECK-NEXT: dec r22 51; CHECK-NEXT: brpl .LBB1_1 52; CHECK-NEXT: .LBB1_2: 53; CHECK-NEXT: ret 54; 55; TINY-LABEL: ror8: 56; TINY: ; %bb.0: 57; TINY-NEXT: andi r22, 7 58; TINY-NEXT: dec r22 59; TINY-NEXT: brmi .LBB1_2 60; TINY-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1 61; TINY-NEXT: bst r24, 0 62; TINY-NEXT: ror r24 63; TINY-NEXT: bld r24, 7 64; TINY-NEXT: dec r22 65; TINY-NEXT: brpl .LBB1_1 66; TINY-NEXT: .LBB1_2: 67; TINY-NEXT: ret 68 %mod = urem i8 %amt, 8 69 %inv = sub i8 8, %mod 70 %parta = lshr i8 %val, %mod 71 %partb = shl i8 %val, %inv 72 %rotr = or i8 %parta, %partb 73 ret i8 %rotr 74} 75 76