| ; FIXME: FastISel currently returns false if it hits code that uses VSX |
| ; registers and with -fast-isel-abort=1 turned on the test case will then fail. |
| ; When fastisel better supports VSX fix up this test case. |
| ; |
| ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 -mattr=-vsx | FileCheck %s --check-prefix=ELF64 |
| |
| define zeroext i1 @rettrue() nounwind { |
| entry: |
| ; ELF64-LABEL: rettrue |
| ; ELF64: li 3, 1 |
| ; ELF64: blr |
| ret i1 true |
| } |
| |
| define zeroext i1 @retfalse() nounwind { |
| entry: |
| ; ELF64-LABEL: retfalse |
| ; ELF64: li 3, 0 |
| ; ELF64: blr |
| ret i1 false |
| } |
| |
| define signext i1 @retstrue() nounwind { |
| entry: |
| ; ELF64-LABEL: retstrue |
| ; ELF64: li 3, -1 |
| ; ELF64: blr |
| ret i1 true |
| } |
| |
| define signext i1 @retsfalse() nounwind { |
| entry: |
| ; ELF64-LABEL: retsfalse |
| ; ELF64: li 3, 0 |
| ; ELF64: blr |
| ret i1 false |
| } |
| |
| define signext i8 @ret2(i8 signext %a) nounwind { |
| entry: |
| ; ELF64-LABEL: ret2 |
| ; ELF64: extsb |
| ; ELF64: blr |
| ret i8 %a |
| } |
| |
| define zeroext i8 @ret3(i8 signext %a) nounwind { |
| entry: |
| ; ELF64-LABEL: ret3 |
| ; ELF64: clrldi {{[0-9]+}}, {{[0-9]+}}, 56 |
| ; ELF64: blr |
| ret i8 %a |
| } |
| |
| define signext i16 @ret4(i16 signext %a) nounwind { |
| entry: |
| ; ELF64-LABEL: ret4 |
| ; ELF64: extsh |
| ; ELF64: blr |
| ret i16 %a |
| } |
| |
| define zeroext i16 @ret5(i16 signext %a) nounwind { |
| entry: |
| ; ELF64-LABEL: ret5 |
| ; ELF64: clrldi {{[0-9]+}}, {{[0-9]+}}, 48 |
| ; ELF64: blr |
| ret i16 %a |
| } |
| |
| define i16 @ret6(i16 %a) nounwind { |
| entry: |
| ; ELF64-LABEL: ret6 |
| ; ELF64: clrldi {{[0-9]+}}, {{[0-9]+}}, 48 |
| ; ELF64: blr |
| ret i16 %a |
| } |
| |
| define signext i32 @ret7(i32 signext %a) nounwind { |
| entry: |
| ; ELF64-LABEL: ret7 |
| ; ELF64: extsw |
| ; ELF64: blr |
| ret i32 %a |
| } |
| |
| define zeroext i32 @ret8(i32 signext %a) nounwind { |
| entry: |
| ; ELF64-LABEL: ret8 |
| ; ELF64: clrldi {{[0-9]+}}, {{[0-9]+}}, 32 |
| ; ELF64: blr |
| ret i32 %a |
| } |
| |
| define i32 @ret9(i32 %a) nounwind { |
| entry: |
| ; ELF64-LABEL: ret9 |
| ; ELF64: clrldi {{[0-9]+}}, {{[0-9]+}}, 32 |
| ; ELF64: blr |
| ret i32 %a |
| } |
| |
| define i64 @ret10(i64 %a) nounwind { |
| entry: |
| ; ELF64-LABEL: ret10 |
| ; ELF64-NOT: exts |
| ; ELF64-NOT: clrldi |
| ; ELF64-NOT: rldicl |
| ; ELF64: blr |
| ret i64 %a |
| } |
| |
| define float @ret11(float %a) nounwind { |
| entry: |
| ; ELF64-LABEL: ret11 |
| ; ELF64: blr |
| ret float %a |
| } |
| |
| define double @ret12(double %a) nounwind { |
| entry: |
| ; ELF64-LABEL: ret12 |
| ; ELF64: blr |
| ret double %a |
| } |
| |
| define i8 @ret13() nounwind { |
| entry: |
| ; ELF64-LABEL: ret13 |
| ; ELF64: li |
| ; ELF64: blr |
| ret i8 15; |
| } |
| |
| define i16 @ret14() nounwind { |
| entry: |
| ; ELF64-LABEL: ret14 |
| ; ELF64: li |
| ; ELF64: blr |
| ret i16 -225; |
| } |
| |
| define i32 @ret15() nounwind { |
| entry: |
| ; ELF64-LABEL: ret15 |
| ; ELF64: lis |
| ; ELF64: ori |
| ; ELF64: blr |
| ret i32 278135; |
| } |
| |
| define i64 @ret16() nounwind { |
| entry: |
| ; ELF64-LABEL: ret16 |
| ; ELF64: li |
| ; ELF64: sldi |
| ; ELF64: oris |
| ; ELF64: ori |
| ; ELF64: blr |
| ret i64 27813515225; |
| } |
| |
| define float @ret17() nounwind { |
| entry: |
| ; ELF64-LABEL: ret17 |
| ; ELF64: addis |
| ; ELF64: lfs |
| ; ELF64: blr |
| ret float 2.5; |
| } |
| |
| define double @ret18() nounwind { |
| entry: |
| ; ELF64-LABEL: ret18 |
| ; ELF64: addis |
| ; ELF64: lfd |
| ; ELF64: blr |
| ret double 2.5e-33; |
| } |
| |
| define zeroext i32 @ret19() nounwind { |
| entry: |
| ; ELF64-LABEL: ret19 |
| ; ELF64: li |
| ; ELF64: oris |
| ; ELF64: ori |
| ; ELF64: blr |
| ret i32 -1 |
| } |
| |
| define zeroext i16 @ret20() nounwind { |
| entry: |
| ; ELF64-LABEL: ret20 |
| ; ELF64: lis{{.*}}0 |
| ; ELF64: ori{{.*}}32768 |
| ; ELF64: blr |
| ret i16 32768 |
| } |