Index: tests/phpunit/tests/post.php
===================================================================
--- tests/phpunit/tests/post.php	(revision 25171)
+++ tests/phpunit/tests/post.php	(working copy)
@@ -823,4 +823,32 @@
 		sort( $exc_result );
 		$this->assertEquals( $inc, $exc_result );
 	}
+
+	/**
+	 * @ticket 9470
+	 */
+	function test_get_pages_parent() {
+		$page_id1 = $this->factory->post->create( array( 'post_type' => 'page' ) );
+		$page_id2 = $this->factory->post->create( array( 'post_type' => 'page', 'post_parent' => $page_id1 ) );
+		$page_id3 = $this->factory->post->create( array( 'post_type' => 'page', 'post_parent' => $page_id2 ) );
+		$page_id4 = $this->factory->post->create( array( 'post_type' => 'page', 'post_parent' => $page_id1 ) );
+
+		$pages = get_pages( array( 'parent' => 0, 'hierarchical' => false ) );
+		$this->assertEqualSets( array( $page_id1 ), wp_list_pluck( $pages, 'ID' ) );
+
+		$pages = get_pages( array( 'parent' => $page_id1, 'hierarchical' => false ) );
+		$this->assertEqualSets( array( $page_id2, $page_id4 ), wp_list_pluck( $pages, 'ID' ) );
+
+		$pages = get_pages( array( 'parent' => array( $page_id1, $page_id2 ), 'hierarchical' => false ) );
+		$this->assertEqualSets( array( $page_id2, $page_id3, $page_id4 ), wp_list_pluck( $pages, 'ID' ) );
+
+		$pages = get_pages( array( 'parent' => 0 ) );
+		$this->assertEqualSets( array( $page_id1 ), wp_list_pluck( $pages, 'ID' ) );
+
+		$pages = get_pages( array( 'parent' => $page_id1 ) );
+		$this->assertEqualSets( array( $page_id2, $page_id4 ), wp_list_pluck( $pages, 'ID' ) );
+
+		$pages = get_pages( array( 'parent' => array( $page_id1, $page_id2 ) ) );
+		$this->assertEqualSets( array( $page_id2, $page_id3, $page_id4 ), wp_list_pluck( $pages, 'ID' ) );
+	}
 }
Index: src/wp-includes/post.php
===================================================================
--- src/wp-includes/post.php	(revision 25171)
+++ src/wp-includes/post.php	(working copy)
@@ -3645,6 +3645,9 @@
 	if ( !in_array( $post_type, $hierarchical_post_types ) )
 		return $pages;
 
+	if ( $parent > 0 && empty( $child_of ) && ! isset( $args['child_of'] ) )
+		$hierarchical = false;
+
 	// Make sure we have a valid post status
 	if ( !is_array( $post_status ) )
 		$post_status = explode( ',', $post_status );
@@ -3731,8 +3734,13 @@
 
 	}
 
-	if ( $parent >= 0 )
+	if ( is_array( $parent ) ) {
+		$post_parent__in = implode( ',', array_map( 'absint', (array) $parent ) );
+		if ( ! empty( $post_parent__in ) )
+			$where .= " AND post_parent IN ($post_parent__in)";
+	} elseif ( $parent >= 0 ) {
 		$where .= $wpdb->prepare(' AND post_parent = %d ', $parent);
+	}
 
 	if ( 1 == count( $post_status ) ) {
 		$where_post_type = $wpdb->prepare( "post_type = %s AND post_status = %s", $post_type, array_shift( $post_status ) );
