Compiler projects using llvm
; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s

define i8 @p0i8() {
; CHECK-LABEL: p0i8:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i8 0
}

define signext i8 @p0si8() {
; CHECK-LABEL: p0si8:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i8 0
}

define zeroext i8 @p0zi8() {
; CHECK-LABEL: p0zi8:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i8 0
}

define i8 @p128i8() {
; CHECK-LABEL: p128i8:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 128
; CHECK-NEXT:    b.l.t (, %s10)
  ret i8 128
}

define signext i8 @p128si8() {
; CHECK-LABEL: p128si8:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, -128
; CHECK-NEXT:    b.l.t (, %s10)
  ret i8 128
}

define zeroext i8 @p128zi8() {
; CHECK-LABEL: p128zi8:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 128
; CHECK-NEXT:    b.l.t (, %s10)
  ret i8 128
}

define i8 @p256i8() {
; CHECK-LABEL: p256i8:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i8 256
}

define signext i8 @p256si8() {
; CHECK-LABEL: p256si8:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i8 256
}

define zeroext i8 @p256zi8() {
; CHECK-LABEL: p256zi8:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i8 256
}

define i16 @p0i16() {
; CHECK-LABEL: p0i16:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i16 0
}

define signext i16 @p0si16() {
; CHECK-LABEL: p0si16:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i16 0
}

define zeroext i16 @p0zi16() {
; CHECK-LABEL: p0zi16:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i16 0
}

define i32 @p0i32() {
; CHECK-LABEL: p0i32:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i32 0
}

define signext i32 @p0si32() {
; CHECK-LABEL: p0si32:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i32 0
}

define zeroext i32 @p0zi32() {
; CHECK-LABEL: p0zi32:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i32 0
}

define i32 @p128i32() {
; CHECK-LABEL: p128i32:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 128
; CHECK-NEXT:    b.l.t (, %s10)
  ret i32 128
}

define signext i32 @p128si32() {
; CHECK-LABEL: p128si32:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 128
; CHECK-NEXT:    b.l.t (, %s10)
  ret i32 128
}

define zeroext i32 @p128zi32() {
; CHECK-LABEL: p128zi32:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 128
; CHECK-NEXT:    b.l.t (, %s10)
  ret i32 128
}

define i64 @p0i64() {
; CHECK-LABEL: p0i64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 0
}

define signext i64 @p0si64() {
; CHECK-LABEL: p0si64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 0
}

define zeroext i64 @p0zi64() {
; CHECK-LABEL: p0zi64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    or %s0, 0, (0)1
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 0
}

define i64 @p128i64() {
; CHECK-LABEL: p128i64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 128
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 128
}

define signext i64 @p128si64() {
; CHECK-LABEL: p128si64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 128
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 128
}

define zeroext i64 @p128zi64() {
; CHECK-LABEL: p128zi64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 128
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 128
}

define i64 @p2264924160i64() {
; CHECK-LABEL: p2264924160i64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, -2030043136
; CHECK-NEXT:    and %s0, %s0, (32)0
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 2264924160
}

define signext i64 @p2264924160si64() {
; CHECK-LABEL: p2264924160si64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, -2030043136
; CHECK-NEXT:    and %s0, %s0, (32)0
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 2264924160
}

define zeroext i64 @p2264924160zi64() {
; CHECK-LABEL: p2264924160zi64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, -2030043136
; CHECK-NEXT:    and %s0, %s0, (32)0
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 2264924160
}

define i64 @p2147483647i64() {
; CHECK-LABEL: p2147483647i64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 2147483647
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 2147483647
}

define signext i64 @p2147483647si64() {
; CHECK-LABEL: p2147483647si64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 2147483647
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 2147483647
}

define zeroext i64 @p2147483647zi64() {
; CHECK-LABEL: p2147483647zi64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 2147483647
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 2147483647
}

define i64 @p15032385535i64() {
; CHECK-LABEL: p15032385535i64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 2147483647
; CHECK-NEXT:    lea.sl %s0, 3(, %s0)
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 15032385535
}

define signext i64 @p15032385535si64() {
; CHECK-LABEL: p15032385535si64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 2147483647
; CHECK-NEXT:    lea.sl %s0, 3(, %s0)
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 15032385535
}

define zeroext i64 @p15032385535zi64() {
; CHECK-LABEL: p15032385535zi64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 2147483647
; CHECK-NEXT:    lea.sl %s0, 3(, %s0)
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 15032385535
}

define i64 @p15032385536i64() {
; CHECK-LABEL: p15032385536i64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, -2147483648
; CHECK-NEXT:    and %s0, %s0, (32)0
; CHECK-NEXT:    lea.sl %s0, 3(, %s0)
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 15032385536
}

define signext i64 @p15032385536si64() {
; CHECK-LABEL: p15032385536si64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, -2147483648
; CHECK-NEXT:    and %s0, %s0, (32)0
; CHECK-NEXT:    lea.sl %s0, 3(, %s0)
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 15032385536
}

define zeroext i64 @p15032385536zi64() {
; CHECK-LABEL: p15032385536zi64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, -2147483648
; CHECK-NEXT:    and %s0, %s0, (32)0
; CHECK-NEXT:    lea.sl %s0, 3(, %s0)
; CHECK-NEXT:    b.l.t (, %s10)
  ret i64 15032385536
}

define float @m5f32() {
; CHECK-LABEL: m5f32:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea.sl %s0, -1063256064
; CHECK-NEXT:    b.l.t (, %s10)
  ret float -5.000000e+00
}

define double @m5f64() {
; CHECK-LABEL: m5f64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea.sl %s0, -1072431104
; CHECK-NEXT:    b.l.t (, %s10)
  ret double -5.000000e+00
}

define float @p2p3f32() {
; CHECK-LABEL: p2p3f32:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea.sl %s0, 1075000115
; CHECK-NEXT:    b.l.t (, %s10)
  ret float 0x4002666660000000 ; 2.3
}

define double @p2p3f64() {
; CHECK-LABEL: p2p3f64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, 1717986918
; CHECK-NEXT:    lea.sl %s0, 1073899110(, %s0)
; CHECK-NEXT:    b.l.t (, %s10)
  ret double 2.3
}

define float @p128p3f32() {
; CHECK-LABEL: p128p3f32:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea.sl %s0, 1124093133
; CHECK-NEXT:    b.l.t (, %s10)
  ret float 0x40600999A0000000 ; 128.3
}

define double @p128p3f64() {
; CHECK-LABEL: p128p3f64:
; CHECK:       # %bb.0:
; CHECK-NEXT:    lea %s0, -1717986918
; CHECK-NEXT:    and %s0, %s0, (32)0
; CHECK-NEXT:    lea.sl %s0, 1080035737(, %s0)
; CHECK-NEXT:    b.l.t (, %s10)
  ret double 128.3
}