// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
// RUN: %clang_cc1 -triple msp430-unknown-unknown -O3 -emit-llvm -o- %s | FileCheck %s
// REQUIRES: msp430-registered-target

_Static_assert(sizeof(int) == 2, "Assumption failed");
_Static_assert(sizeof(long) == 4, "Assumption failed");
_Static_assert(sizeof(long long) == 8, "Assumption failed");
_Static_assert(sizeof(float) == 4, "Assumption failed");
_Static_assert(sizeof(double) == 8, "Assumption failed");
_Static_assert(sizeof(long double) == 8, "Assumption failed");

// CHECK-LABEL: @powif(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    [[TMP0:%.*]] = tail call float @llvm.powi.f32.i16(float [[X:%.*]], i16 [[Y:%.*]])
// CHECK-NEXT:    ret float [[TMP0]]
//
float powif(float x, int y) {
    return __builtin_powif(x, y);
}

// CHECK-LABEL: @powi(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    [[TMP0:%.*]] = tail call double @llvm.powi.f64.i16(double [[X:%.*]], i16 [[Y:%.*]])
// CHECK-NEXT:    ret double [[TMP0]]
//
double powi(double x, int y) {
  return __builtin_powi(x, y);
}

// CHECK-LABEL: @powil(
// CHECK-NEXT:  entry:
// CHECK-NEXT:    [[TMP0:%.*]] = tail call double @llvm.powi.f64.i16(double [[X:%.*]], i16 [[Y:%.*]])
// CHECK-NEXT:    ret double [[TMP0]]
//
long double powil(long double x, int y) {
    return __builtin_powil(x, y);
}
