| ; Ensure that shifts are lowered to loops when the barrel shifter unit is | |
| ; not available in the hardware and that loops are not used when the | |
| ; barrel shifter unit is available in the hardware. | |
| ; | |
| ; RUN: llc < %s -march=mblaze | FileCheck -check-prefix=FUN %s | |
| ; RUN: llc < %s -march=mblaze -mattr=+barrel | FileCheck -check-prefix=SHT %s | |
| define i8 @test_i8(i8 %a, i8 %b) { | |
| ; FUN: test_i8: | |
| ; SHT: test_i8: | |
| %tmp.1 = shl i8 %a, %b | |
| ; FUN: andi | |
| ; FUN: add | |
| ; FUN: bnei | |
| ; SHT-NOT: bnei | |
| ret i8 %tmp.1 | |
| ; FUN: rtsd | |
| ; SHT: rtsd | |
| ; FUN-NOT: bsll | |
| ; SHT-NEXT: bsll | |
| } | |
| define i8 @testc_i8(i8 %a, i8 %b) { | |
| ; FUN: testc_i8: | |
| ; SHT: testc_i8: | |
| %tmp.1 = shl i8 %a, 5 | |
| ; FUN: andi | |
| ; FUN: add | |
| ; FUN: bnei | |
| ; SHT-NOT: andi | |
| ; SHT-NOT: add | |
| ; SHT-NOT: bnei | |
| ret i8 %tmp.1 | |
| ; FUN: rtsd | |
| ; SHT: rtsd | |
| ; FUN-NOT: bsll | |
| ; SHT-NEXT: bslli | |
| } | |
| define i16 @test_i16(i16 %a, i16 %b) { | |
| ; FUN: test_i16: | |
| ; SHT: test_i16: | |
| %tmp.1 = shl i16 %a, %b | |
| ; FUN: andi | |
| ; FUN: add | |
| ; FUN: bnei | |
| ; SHT-NOT: bnei | |
| ret i16 %tmp.1 | |
| ; FUN: rtsd | |
| ; SHT: rtsd | |
| ; FUN-NOT: bsll | |
| ; SHT-NEXT: bsll | |
| } | |
| define i16 @testc_i16(i16 %a, i16 %b) { | |
| ; FUN: testc_i16: | |
| ; SHT: testc_i16: | |
| %tmp.1 = shl i16 %a, 5 | |
| ; FUN: andi | |
| ; FUN: add | |
| ; FUN: bnei | |
| ; SHT-NOT: andi | |
| ; SHT-NOT: add | |
| ; SHT-NOT: bnei | |
| ret i16 %tmp.1 | |
| ; FUN: rtsd | |
| ; SHT: rtsd | |
| ; FUN-NOT: bsll | |
| ; SHT-NEXT: bslli | |
| } | |
| define i32 @test_i32(i32 %a, i32 %b) { | |
| ; FUN: test_i32: | |
| ; SHT: test_i32: | |
| %tmp.1 = shl i32 %a, %b | |
| ; FUN: andi | |
| ; FUN: add | |
| ; FUN: bnei | |
| ; SHT-NOT: andi | |
| ; SHT-NOT: bnei | |
| ret i32 %tmp.1 | |
| ; FUN: rtsd | |
| ; SHT: rtsd | |
| ; FUN-NOT: bsll | |
| ; SHT-NEXT: bsll | |
| } | |
| define i32 @testc_i32(i32 %a, i32 %b) { | |
| ; FUN: testc_i32: | |
| ; SHT: testc_i32: | |
| %tmp.1 = shl i32 %a, 5 | |
| ; FUN: andi | |
| ; FUN: add | |
| ; FUN: bnei | |
| ; SHT-NOT: andi | |
| ; SHT-NOT: add | |
| ; SHT-NOT: bnei | |
| ret i32 %tmp.1 | |
| ; FUN: rtsd | |
| ; SHT: rtsd | |
| ; FUN-NOT: bsll | |
| ; SHT-NEXT: bslli | |
| } |