diff --git a/src/ipa/libipa/pwl.cpp b/src/ipa/libipa/pwl.cpp
index 1858ab37b101..501ac79ea8b5 100644
--- a/src/ipa/libipa/pwl.cpp
+++ b/src/ipa/libipa/pwl.cpp
@@ -122,6 +122,25 @@ Pwl::Pwl(std::vector<Point> &&points)
 {
 }
 
+/**
+ * \brief Construct a piecewise linear function from a initializer list
+ * \param[in] data initializer list of doubles
+ *
+ * This constructor takes a even number of doubles and treats them as
+ * x0,y0,x1,y1,...,xn,yn coordinates for the PWL.
+ */
+Pwl::Pwl(std::initializer_list<double> data)
+{
+	ASSERT((data.size() % 2) == 0);
+
+	auto iter = data.begin();
+	while (iter != data.end()) {
+		double x = *iter++;
+		double y = *iter++;
+		append(x, y);
+	}
+}
+
 /**
  * \brief Append a point to the end of the piecewise linear function
  * \param[in] x x-coordinate of the point to add to the piecewise linear function
diff --git a/src/ipa/libipa/pwl.h b/src/ipa/libipa/pwl.h
index add20b5867af..b82b17317a5e 100644
--- a/src/ipa/libipa/pwl.h
+++ b/src/ipa/libipa/pwl.h
@@ -45,6 +45,7 @@ public:
 	Pwl();
 	Pwl(const std::vector<Point> &points);
 	Pwl(std::vector<Point> &&points);
+	Pwl(std::initializer_list<double> data);
 
 	void append(double x, double y, double eps = 1e-6);
 
