https://github.com/Men-cotton updated 
https://github.com/llvm/llvm-project/pull/194518

>From 9a48e7723f39a451e6e5b637786b1ddb074c8d6d Mon Sep 17 00:00:00 2001
From: mencotton <[email protected]>
Date: Mon, 20 Apr 2026 00:31:14 +0900
Subject: [PATCH 1/3] [CIR][NFC] Add IR roundtrip tests for constants

Add `clang/test/CIR/IR` roundtrip tests for CIR constant attributes: integer 
boundary constants, floating-point special values that require exact hex 
spelling, and pointer constants with integer and null payloads.

Partially addresses #156747.
---
 clang/test/CIR/IR/constptrattr.cir | 11 +++++
 clang/test/CIR/IR/float.cir        | 70 ++++++++++++++++++++++++++++++
 clang/test/CIR/IR/int.cir          | 44 +++++++++++++++++++
 3 files changed, 125 insertions(+)
 create mode 100644 clang/test/CIR/IR/constptrattr.cir
 create mode 100644 clang/test/CIR/IR/float.cir
 create mode 100644 clang/test/CIR/IR/int.cir

diff --git a/clang/test/CIR/IR/constptrattr.cir 
b/clang/test/CIR/IR/constptrattr.cir
new file mode 100644
index 0000000000000..da155a9f739b8
--- /dev/null
+++ b/clang/test/CIR/IR/constptrattr.cir
@@ -0,0 +1,11 @@
+// RUN: cir-opt %s --verify-roundtrip | FileCheck %s
+
+!s32i = !cir.int<s, 32>
+
+cir.global external @const_ptr = #cir.ptr<4660 : i64> : !cir.ptr<!s32i>
+cir.global external @signed_ptr = #cir.ptr<-1 : i64> : !cir.ptr<!s32i>
+cir.global external @null_ptr = #cir.ptr<null> : !cir.ptr<!s32i>
+
+// CHECK: cir.global external @const_ptr = #cir.ptr<4660 : i64> : 
!cir.ptr<!s32i>
+// CHECK: cir.global external @signed_ptr = #cir.ptr<-1 : i64> : 
!cir.ptr<!s32i>
+// CHECK: cir.global external @null_ptr = #cir.ptr<null> : !cir.ptr<!s32i>
diff --git a/clang/test/CIR/IR/float.cir b/clang/test/CIR/IR/float.cir
new file mode 100644
index 0000000000000..d9e23249d7848
--- /dev/null
+++ b/clang/test/CIR/IR/float.cir
@@ -0,0 +1,70 @@
+// RUN: cir-opt %s --verify-roundtrip | FileCheck %s
+
+// Exercise parser/printer roundtrip for floating-point values that require
+// exact hex spelling.
+
+cir.func @f32_special_values() {
+  %0 = cir.const #cir.fp<0x7F800001> : !cir.float
+  %1 = cir.const #cir.fp<0x7FBFFFFF> : !cir.float
+  %2 = cir.const #cir.fp<0x7FC00000> : !cir.float
+  %3 = cir.const #cir.fp<0xFFFFFFFF> : !cir.float
+  %4 = cir.const #cir.fp<0x7F800000> : !cir.float
+  %5 = cir.const #cir.fp<0xFF800000> : !cir.float
+  cir.return
+}
+
+// CHECK-LABEL: cir.func @f32_special_values
+// CHECK: cir.const #cir.fp<0x7F800001> : !cir.float
+// CHECK: cir.const #cir.fp<0x7FBFFFFF> : !cir.float
+// CHECK: cir.const #cir.fp<0x7FC00000> : !cir.float
+// CHECK: cir.const #cir.fp<0xFFFFFFFF> : !cir.float
+// CHECK: cir.const #cir.fp<0x7F800000> : !cir.float
+// CHECK: cir.const #cir.fp<0xFF800000> : !cir.float
+
+cir.func @f64_special_values() {
+  %0 = cir.const #cir.fp<0x7FF0000000000001> : !cir.double
+  %1 = cir.const #cir.fp<0x7FF8000000000000> : !cir.double
+  %2 = cir.const #cir.fp<0x7FF0000001000000> : !cir.double
+  %3 = cir.const #cir.fp<0xFFF0000001000000> : !cir.double
+  %4 = cir.const #cir.fp<0x7FF0000000000000> : !cir.double
+  %5 = cir.const #cir.fp<0xFFF0000000000000> : !cir.double
+  %6 = cir.const #cir.fp<0xC1CDC00000000000> : !cir.double
+  cir.return
+}
+
+// CHECK-LABEL: cir.func @f64_special_values
+// CHECK: cir.const #cir.fp<0x7FF0000000000001> : !cir.double
+// CHECK: cir.const #cir.fp<0x7FF8000000000000> : !cir.double
+// CHECK: cir.const #cir.fp<0x7FF0000001000000> : !cir.double
+// CHECK: cir.const #cir.fp<0xFFF0000001000000> : !cir.double
+// CHECK: cir.const #cir.fp<0x7FF0000000000000> : !cir.double
+// CHECK: cir.const #cir.fp<0xFFF0000000000000> : !cir.double
+// CHECK: cir.const #cir.fp<0xC1CDC00000000000> : !cir.double
+
+cir.func @f80_special_values() {
+  %0 = cir.const #cir.fp<0x7FFFE000000000000001> : !cir.long_double<!cir.f80>
+  %1 = cir.const #cir.fp<0x7FFFB000000000000011> : !cir.long_double<!cir.f80>
+  %2 = cir.const #cir.fp<0x7FFFC000000000100000> : !cir.long_double<!cir.f80>
+  %3 = cir.const #cir.fp<0x7FFFE000000001000000> : !cir.long_double<!cir.f80>
+  %4 = cir.const #cir.fp<0x7FFF8000000000000000> : !cir.long_double<!cir.f80>
+  %5 = cir.const #cir.fp<0xFFFF8000000000000000> : !cir.long_double<!cir.f80>
+  cir.return
+}
+
+// CHECK-LABEL: cir.func @f80_special_values
+// CHECK: cir.const #cir.fp<0x7FFFE000000000000001> : 
!cir.long_double<!cir.f80>
+// CHECK: cir.const #cir.fp<0x7FFFB000000000000011> : 
!cir.long_double<!cir.f80>
+// CHECK: cir.const #cir.fp<0x7FFFC000000000100000> : 
!cir.long_double<!cir.f80>
+// CHECK: cir.const #cir.fp<0x7FFFE000000001000000> : 
!cir.long_double<!cir.f80>
+// CHECK: cir.const #cir.fp<0x7FFF8000000000000000> : 
!cir.long_double<!cir.f80>
+// CHECK: cir.const #cir.fp<0xFFFF8000000000000000> : 
!cir.long_double<!cir.f80>
+
+// Check that decimal values are preserved when exponential notation would lose
+// precision during roundtrip parsing.
+cir.func @f32_potential_precision_loss() {
+  %0 = cir.const #cir.fp<1.23697901> : !cir.float
+  cir.return
+}
+
+// CHECK-LABEL: cir.func @f32_potential_precision_loss
+// CHECK: cir.const #cir.fp<1.23697901> : !cir.float
diff --git a/clang/test/CIR/IR/int.cir b/clang/test/CIR/IR/int.cir
new file mode 100644
index 0000000000000..18c0fddc28a4c
--- /dev/null
+++ b/clang/test/CIR/IR/int.cir
@@ -0,0 +1,44 @@
+// RUN: cir-opt %s --verify-roundtrip | FileCheck %s
+
+!s8i = !cir.int<s, 8>
+!s16i = !cir.int<s, 16>
+!s32i = !cir.int<s, 32>
+!s64i = !cir.int<s, 64>
+!u8i = !cir.int<u, 8>
+!u16i = !cir.int<u, 16>
+!u32i = !cir.int<u, 32>
+!u64i = !cir.int<u, 64>
+
+cir.func @integer_boundary_constants() {
+  %0 = cir.const #cir.int<-128> : !s8i
+  %1 = cir.const #cir.int<127> : !s8i
+  %2 = cir.const #cir.int<255> : !u8i
+
+  %3 = cir.const #cir.int<-32768> : !s16i
+  %4 = cir.const #cir.int<32767> : !s16i
+  %5 = cir.const #cir.int<65535> : !u16i
+
+  %6 = cir.const #cir.int<-2147483648> : !s32i
+  %7 = cir.const #cir.int<2147483647> : !s32i
+  %8 = cir.const #cir.int<4294967295> : !u32i
+
+  %9 = cir.const #cir.int<9223372036854775807> : !s64i
+  %10 = cir.const #cir.int<18446744073709551615> : !u64i
+  cir.return
+}
+
+// CHECK-LABEL: cir.func @integer_boundary_constants
+// CHECK:         cir.const #cir.int<-128> : !s8i
+// CHECK:         cir.const #cir.int<127> : !s8i
+// CHECK:         cir.const #cir.int<255> : !u8i
+
+// CHECK:         cir.const #cir.int<-32768> : !s16i
+// CHECK:         cir.const #cir.int<32767> : !s16i
+// CHECK:         cir.const #cir.int<65535> : !u16i
+
+// CHECK:         cir.const #cir.int<-2147483648> : !s32i
+// CHECK:         cir.const #cir.int<2147483647> : !s32i
+// CHECK:         cir.const #cir.int<4294967295> : !u32i
+
+// CHECK:         cir.const #cir.int<9223372036854775807> : !s64i
+// CHECK:         cir.const #cir.int<18446744073709551615> : !u64i

>From 786fa429db4db63328161234f57081dceeccee63 Mon Sep 17 00:00:00 2001
From: mencotton <[email protected]>
Date: Thu, 30 Apr 2026 13:57:19 +0900
Subject: [PATCH 2/3] fix: move FileCheck lines

---
 clang/test/CIR/IR/constptrattr.cir |  7 ++--
 clang/test/CIR/IR/float.cir        | 52 ++++++++++++++----------------
 clang/test/CIR/IR/int.cir          | 28 +++++++---------
 3 files changed, 39 insertions(+), 48 deletions(-)

diff --git a/clang/test/CIR/IR/constptrattr.cir 
b/clang/test/CIR/IR/constptrattr.cir
index da155a9f739b8..ea610132b6b51 100644
--- a/clang/test/CIR/IR/constptrattr.cir
+++ b/clang/test/CIR/IR/constptrattr.cir
@@ -2,10 +2,9 @@
 
 !s32i = !cir.int<s, 32>
 
-cir.global external @const_ptr = #cir.ptr<4660 : i64> : !cir.ptr<!s32i>
-cir.global external @signed_ptr = #cir.ptr<-1 : i64> : !cir.ptr<!s32i>
-cir.global external @null_ptr = #cir.ptr<null> : !cir.ptr<!s32i>
-
 // CHECK: cir.global external @const_ptr = #cir.ptr<4660 : i64> : 
!cir.ptr<!s32i>
+cir.global external @const_ptr = #cir.ptr<4660 : i64> : !cir.ptr<!s32i>
 // CHECK: cir.global external @signed_ptr = #cir.ptr<-1 : i64> : 
!cir.ptr<!s32i>
+cir.global external @signed_ptr = #cir.ptr<-1 : i64> : !cir.ptr<!s32i>
 // CHECK: cir.global external @null_ptr = #cir.ptr<null> : !cir.ptr<!s32i>
+cir.global external @null_ptr = #cir.ptr<null> : !cir.ptr<!s32i>
diff --git a/clang/test/CIR/IR/float.cir b/clang/test/CIR/IR/float.cir
index d9e23249d7848..4b97f3b2811bb 100644
--- a/clang/test/CIR/IR/float.cir
+++ b/clang/test/CIR/IR/float.cir
@@ -3,68 +3,64 @@
 // Exercise parser/printer roundtrip for floating-point values that require
 // exact hex spelling.
 
+// CHECK-LABEL: cir.func @f32_special_values
 cir.func @f32_special_values() {
+  // CHECK: cir.const #cir.fp<0x7F800001> : !cir.float
   %0 = cir.const #cir.fp<0x7F800001> : !cir.float
+  // CHECK: cir.const #cir.fp<0x7FBFFFFF> : !cir.float
   %1 = cir.const #cir.fp<0x7FBFFFFF> : !cir.float
+  // CHECK: cir.const #cir.fp<0x7FC00000> : !cir.float
   %2 = cir.const #cir.fp<0x7FC00000> : !cir.float
+  // CHECK: cir.const #cir.fp<0xFFFFFFFF> : !cir.float
   %3 = cir.const #cir.fp<0xFFFFFFFF> : !cir.float
+  // CHECK: cir.const #cir.fp<0x7F800000> : !cir.float
   %4 = cir.const #cir.fp<0x7F800000> : !cir.float
+  // CHECK: cir.const #cir.fp<0xFF800000> : !cir.float
   %5 = cir.const #cir.fp<0xFF800000> : !cir.float
   cir.return
 }
 
-// CHECK-LABEL: cir.func @f32_special_values
-// CHECK: cir.const #cir.fp<0x7F800001> : !cir.float
-// CHECK: cir.const #cir.fp<0x7FBFFFFF> : !cir.float
-// CHECK: cir.const #cir.fp<0x7FC00000> : !cir.float
-// CHECK: cir.const #cir.fp<0xFFFFFFFF> : !cir.float
-// CHECK: cir.const #cir.fp<0x7F800000> : !cir.float
-// CHECK: cir.const #cir.fp<0xFF800000> : !cir.float
-
+// CHECK-LABEL: cir.func @f64_special_values
 cir.func @f64_special_values() {
+  // CHECK: cir.const #cir.fp<0x7FF0000000000001> : !cir.double
   %0 = cir.const #cir.fp<0x7FF0000000000001> : !cir.double
+  // CHECK: cir.const #cir.fp<0x7FF8000000000000> : !cir.double
   %1 = cir.const #cir.fp<0x7FF8000000000000> : !cir.double
+  // CHECK: cir.const #cir.fp<0x7FF0000001000000> : !cir.double
   %2 = cir.const #cir.fp<0x7FF0000001000000> : !cir.double
+  // CHECK: cir.const #cir.fp<0xFFF0000001000000> : !cir.double
   %3 = cir.const #cir.fp<0xFFF0000001000000> : !cir.double
+  // CHECK: cir.const #cir.fp<0x7FF0000000000000> : !cir.double
   %4 = cir.const #cir.fp<0x7FF0000000000000> : !cir.double
+  // CHECK: cir.const #cir.fp<0xFFF0000000000000> : !cir.double
   %5 = cir.const #cir.fp<0xFFF0000000000000> : !cir.double
+  // CHECK: cir.const #cir.fp<0xC1CDC00000000000> : !cir.double
   %6 = cir.const #cir.fp<0xC1CDC00000000000> : !cir.double
   cir.return
 }
 
-// CHECK-LABEL: cir.func @f64_special_values
-// CHECK: cir.const #cir.fp<0x7FF0000000000001> : !cir.double
-// CHECK: cir.const #cir.fp<0x7FF8000000000000> : !cir.double
-// CHECK: cir.const #cir.fp<0x7FF0000001000000> : !cir.double
-// CHECK: cir.const #cir.fp<0xFFF0000001000000> : !cir.double
-// CHECK: cir.const #cir.fp<0x7FF0000000000000> : !cir.double
-// CHECK: cir.const #cir.fp<0xFFF0000000000000> : !cir.double
-// CHECK: cir.const #cir.fp<0xC1CDC00000000000> : !cir.double
-
+// CHECK-LABEL: cir.func @f80_special_values
 cir.func @f80_special_values() {
+  // CHECK: cir.const #cir.fp<0x7FFFE000000000000001> : 
!cir.long_double<!cir.f80>
   %0 = cir.const #cir.fp<0x7FFFE000000000000001> : !cir.long_double<!cir.f80>
+  // CHECK: cir.const #cir.fp<0x7FFFB000000000000011> : 
!cir.long_double<!cir.f80>
   %1 = cir.const #cir.fp<0x7FFFB000000000000011> : !cir.long_double<!cir.f80>
+  // CHECK: cir.const #cir.fp<0x7FFFC000000000100000> : 
!cir.long_double<!cir.f80>
   %2 = cir.const #cir.fp<0x7FFFC000000000100000> : !cir.long_double<!cir.f80>
+  // CHECK: cir.const #cir.fp<0x7FFFE000000001000000> : 
!cir.long_double<!cir.f80>
   %3 = cir.const #cir.fp<0x7FFFE000000001000000> : !cir.long_double<!cir.f80>
+  // CHECK: cir.const #cir.fp<0x7FFF8000000000000000> : 
!cir.long_double<!cir.f80>
   %4 = cir.const #cir.fp<0x7FFF8000000000000000> : !cir.long_double<!cir.f80>
+  // CHECK: cir.const #cir.fp<0xFFFF8000000000000000> : 
!cir.long_double<!cir.f80>
   %5 = cir.const #cir.fp<0xFFFF8000000000000000> : !cir.long_double<!cir.f80>
   cir.return
 }
 
-// CHECK-LABEL: cir.func @f80_special_values
-// CHECK: cir.const #cir.fp<0x7FFFE000000000000001> : 
!cir.long_double<!cir.f80>
-// CHECK: cir.const #cir.fp<0x7FFFB000000000000011> : 
!cir.long_double<!cir.f80>
-// CHECK: cir.const #cir.fp<0x7FFFC000000000100000> : 
!cir.long_double<!cir.f80>
-// CHECK: cir.const #cir.fp<0x7FFFE000000001000000> : 
!cir.long_double<!cir.f80>
-// CHECK: cir.const #cir.fp<0x7FFF8000000000000000> : 
!cir.long_double<!cir.f80>
-// CHECK: cir.const #cir.fp<0xFFFF8000000000000000> : 
!cir.long_double<!cir.f80>
-
 // Check that decimal values are preserved when exponential notation would lose
 // precision during roundtrip parsing.
+// CHECK-LABEL: cir.func @f32_potential_precision_loss
 cir.func @f32_potential_precision_loss() {
+  // CHECK: cir.const #cir.fp<1.23697901> : !cir.float
   %0 = cir.const #cir.fp<1.23697901> : !cir.float
   cir.return
 }
-
-// CHECK-LABEL: cir.func @f32_potential_precision_loss
-// CHECK: cir.const #cir.fp<1.23697901> : !cir.float
diff --git a/clang/test/CIR/IR/int.cir b/clang/test/CIR/IR/int.cir
index 18c0fddc28a4c..29eb20c3aba9c 100644
--- a/clang/test/CIR/IR/int.cir
+++ b/clang/test/CIR/IR/int.cir
@@ -9,36 +9,32 @@
 !u32i = !cir.int<u, 32>
 !u64i = !cir.int<u, 64>
 
+// CHECK-LABEL: cir.func @integer_boundary_constants
 cir.func @integer_boundary_constants() {
+  // CHECK:         cir.const #cir.int<-128> : !s8i
   %0 = cir.const #cir.int<-128> : !s8i
+  // CHECK:         cir.const #cir.int<127> : !s8i
   %1 = cir.const #cir.int<127> : !s8i
+  // CHECK:         cir.const #cir.int<255> : !u8i
   %2 = cir.const #cir.int<255> : !u8i
 
+  // CHECK:         cir.const #cir.int<-32768> : !s16i
   %3 = cir.const #cir.int<-32768> : !s16i
+  // CHECK:         cir.const #cir.int<32767> : !s16i
   %4 = cir.const #cir.int<32767> : !s16i
+  // CHECK:         cir.const #cir.int<65535> : !u16i
   %5 = cir.const #cir.int<65535> : !u16i
 
+  // CHECK:         cir.const #cir.int<-2147483648> : !s32i
   %6 = cir.const #cir.int<-2147483648> : !s32i
+  // CHECK:         cir.const #cir.int<2147483647> : !s32i
   %7 = cir.const #cir.int<2147483647> : !s32i
+  // CHECK:         cir.const #cir.int<4294967295> : !u32i
   %8 = cir.const #cir.int<4294967295> : !u32i
 
+  // CHECK:         cir.const #cir.int<9223372036854775807> : !s64i
   %9 = cir.const #cir.int<9223372036854775807> : !s64i
+  // CHECK:         cir.const #cir.int<18446744073709551615> : !u64i
   %10 = cir.const #cir.int<18446744073709551615> : !u64i
   cir.return
 }
-
-// CHECK-LABEL: cir.func @integer_boundary_constants
-// CHECK:         cir.const #cir.int<-128> : !s8i
-// CHECK:         cir.const #cir.int<127> : !s8i
-// CHECK:         cir.const #cir.int<255> : !u8i
-
-// CHECK:         cir.const #cir.int<-32768> : !s16i
-// CHECK:         cir.const #cir.int<32767> : !s16i
-// CHECK:         cir.const #cir.int<65535> : !u16i
-
-// CHECK:         cir.const #cir.int<-2147483648> : !s32i
-// CHECK:         cir.const #cir.int<2147483647> : !s32i
-// CHECK:         cir.const #cir.int<4294967295> : !u32i
-
-// CHECK:         cir.const #cir.int<9223372036854775807> : !s64i
-// CHECK:         cir.const #cir.int<18446744073709551615> : !u64i

>From 5871748d6122f06c894e63c9fb671ec6bd0bd1f0 Mon Sep 17 00:00:00 2001
From: mencotton <[email protected]>
Date: Tue, 5 May 2026 23:12:36 +0900
Subject: [PATCH 3/3] Fix: drop redundant spaces

---
 clang/test/CIR/IR/int.cir | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/clang/test/CIR/IR/int.cir b/clang/test/CIR/IR/int.cir
index 29eb20c3aba9c..c16d3181bcbd7 100644
--- a/clang/test/CIR/IR/int.cir
+++ b/clang/test/CIR/IR/int.cir
@@ -11,30 +11,30 @@
 
 // CHECK-LABEL: cir.func @integer_boundary_constants
 cir.func @integer_boundary_constants() {
-  // CHECK:         cir.const #cir.int<-128> : !s8i
+  // CHECK: cir.const #cir.int<-128> : !s8i
   %0 = cir.const #cir.int<-128> : !s8i
-  // CHECK:         cir.const #cir.int<127> : !s8i
+  // CHECK: cir.const #cir.int<127> : !s8i
   %1 = cir.const #cir.int<127> : !s8i
-  // CHECK:         cir.const #cir.int<255> : !u8i
+  // CHECK: cir.const #cir.int<255> : !u8i
   %2 = cir.const #cir.int<255> : !u8i
 
-  // CHECK:         cir.const #cir.int<-32768> : !s16i
+  // CHECK: cir.const #cir.int<-32768> : !s16i
   %3 = cir.const #cir.int<-32768> : !s16i
-  // CHECK:         cir.const #cir.int<32767> : !s16i
+  // CHECK: cir.const #cir.int<32767> : !s16i
   %4 = cir.const #cir.int<32767> : !s16i
-  // CHECK:         cir.const #cir.int<65535> : !u16i
+  // CHECK: cir.const #cir.int<65535> : !u16i
   %5 = cir.const #cir.int<65535> : !u16i
 
-  // CHECK:         cir.const #cir.int<-2147483648> : !s32i
+  // CHECK: cir.const #cir.int<-2147483648> : !s32i
   %6 = cir.const #cir.int<-2147483648> : !s32i
-  // CHECK:         cir.const #cir.int<2147483647> : !s32i
+  // CHECK: cir.const #cir.int<2147483647> : !s32i
   %7 = cir.const #cir.int<2147483647> : !s32i
-  // CHECK:         cir.const #cir.int<4294967295> : !u32i
+  // CHECK: cir.const #cir.int<4294967295> : !u32i
   %8 = cir.const #cir.int<4294967295> : !u32i
 
-  // CHECK:         cir.const #cir.int<9223372036854775807> : !s64i
+  // CHECK: cir.const #cir.int<9223372036854775807> : !s64i
   %9 = cir.const #cir.int<9223372036854775807> : !s64i
-  // CHECK:         cir.const #cir.int<18446744073709551615> : !u64i
+  // CHECK: cir.const #cir.int<18446744073709551615> : !u64i
   %10 = cir.const #cir.int<18446744073709551615> : !u64i
   cir.return
 }

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to