[llvm] 430bdb1 - [NFC][WebAssembly] More fpclamptosat tests

Samuel Parker via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 25 02:25:34 PST 2023


Author: Samuel Parker
Date: 2023-01-25T10:25:23Z
New Revision: 430bdb121571794864c11e1aa527ea1bc376bde8

URL: https://github.com/llvm/llvm-project/commit/430bdb121571794864c11e1aa527ea1bc376bde8
DIFF: https://github.com/llvm/llvm-project/commit/430bdb121571794864c11e1aa527ea1bc376bde8.diff

LOG: [NFC][WebAssembly] More fpclamptosat tests

Added: 
    

Modified: 
    llvm/test/CodeGen/WebAssembly/fpclamptosat.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/WebAssembly/fpclamptosat.ll b/llvm/test/CodeGen/WebAssembly/fpclamptosat.ll
index f648ca824f65a..4a1a9a2b3cf0e 100644
--- a/llvm/test/CodeGen/WebAssembly/fpclamptosat.ll
+++ b/llvm/test/CodeGen/WebAssembly/fpclamptosat.ll
@@ -564,6 +564,50 @@ entry:
   ret i64 %conv6
 }
 
+define i64 @utest_f64i64_cse_combine(double %x) #0 {
+; CHECK-LABEL: utest_f64i64_cse_combine:
+; CHECK:         .functype utest_f64i64_cse_combine (f64) -> (i64)
+; CHECK-NEXT:    .local i32, i64, i64
+; CHECK-NEXT:  # %bb.0: # %entry
+; CHECK-NEXT:    global.get __stack_pointer
+; CHECK-NEXT:    i32.const 16
+; CHECK-NEXT:    i32.sub
+; CHECK-NEXT:    local.tee 1
+; CHECK-NEXT:    global.set __stack_pointer
+; CHECK-NEXT:    local.get 1
+; CHECK-NEXT:    local.get 0
+; CHECK-NEXT:    call __fixunsdfti
+; CHECK-NEXT:    local.get 1
+; CHECK-NEXT:    i32.const 8
+; CHECK-NEXT:    i32.add
+; CHECK-NEXT:    i64.load 0
+; CHECK-NEXT:    local.set 2
+; CHECK-NEXT:    local.get 1
+; CHECK-NEXT:    i64.load 0
+; CHECK-NEXT:    local.set 3
+; CHECK-NEXT:    local.get 1
+; CHECK-NEXT:    i32.const 16
+; CHECK-NEXT:    i32.add
+; CHECK-NEXT:    global.set __stack_pointer
+; CHECK-NEXT:    i64.const 0
+; CHECK-NEXT:    local.get 3
+; CHECK-NEXT:    i64.const 0
+; CHECK-NEXT:    local.get 2
+; CHECK-NEXT:    i64.eqz
+; CHECK-NEXT:    i64.select
+; CHECK-NEXT:    local.get 2
+; CHECK-NEXT:    i64.const 1
+; CHECK-NEXT:    i64.eq
+; CHECK-NEXT:    i64.select
+; CHECK-NEXT:    # fallthrough-return
+entry:
+  %conv = fptoui double %x to i128
+  %spec.store.select = call i128 @llvm.umin.i128(i128 %conv, i128 18446744073709551616)
+  %conv6 = trunc i128 %spec.store.select to i64
+  ret i64 %conv6
+}
+
+
 define i64 @ustest_f64i64(double %x) {
 ; CHECK-LABEL: ustest_f64i64:
 ; CHECK:         .functype ustest_f64i64 (f64) -> (i64)
@@ -623,6 +667,66 @@ entry:
   ret i64 %conv6
 }
 
+define i64 @ustest_f64i64_cse_combine(double %x) #0 {
+; CHECK-LABEL: ustest_f64i64_cse_combine:
+; CHECK:         .functype ustest_f64i64_cse_combine (f64) -> (i64)
+; CHECK-NEXT:    .local i32, i64, i64
+; CHECK-NEXT:  # %bb.0: # %entry
+; CHECK-NEXT:    global.get __stack_pointer
+; CHECK-NEXT:    i32.const 16
+; CHECK-NEXT:    i32.sub
+; CHECK-NEXT:    local.tee 1
+; CHECK-NEXT:    global.set __stack_pointer
+; CHECK-NEXT:    local.get 1
+; CHECK-NEXT:    local.get 0
+; CHECK-NEXT:    call __fixdfti
+; CHECK-NEXT:    local.get 1
+; CHECK-NEXT:    i32.const 8
+; CHECK-NEXT:    i32.add
+; CHECK-NEXT:    i64.load 0
+; CHECK-NEXT:    local.set 2
+; CHECK-NEXT:    local.get 1
+; CHECK-NEXT:    i64.load 0
+; CHECK-NEXT:    local.set 3
+; CHECK-NEXT:    local.get 1
+; CHECK-NEXT:    i32.const 16
+; CHECK-NEXT:    i32.add
+; CHECK-NEXT:    global.set __stack_pointer
+; CHECK-NEXT:    i64.const 0
+; CHECK-NEXT:    local.get 3
+; CHECK-NEXT:    i64.const 0
+; CHECK-NEXT:    local.get 2
+; CHECK-NEXT:    i64.const 1
+; CHECK-NEXT:    i64.lt_s
+; CHECK-NEXT:    local.tee 1
+; CHECK-NEXT:    i64.select
+; CHECK-NEXT:    local.get 2
+; CHECK-NEXT:    i64.const 1
+; CHECK-NEXT:    i64.eq
+; CHECK-NEXT:    i64.select
+; CHECK-NEXT:    local.tee 3
+; CHECK-NEXT:    local.get 3
+; CHECK-NEXT:    i64.const 0
+; CHECK-NEXT:    local.get 2
+; CHECK-NEXT:    i64.const 1
+; CHECK-NEXT:    local.get 1
+; CHECK-NEXT:    i64.select
+; CHECK-NEXT:    local.tee 2
+; CHECK-NEXT:    i64.const 0
+; CHECK-NEXT:    i64.gt_s
+; CHECK-NEXT:    i64.select
+; CHECK-NEXT:    local.get 2
+; CHECK-NEXT:    i64.eqz
+; CHECK-NEXT:    i64.select
+; CHECK-NEXT:    # fallthrough-return
+entry:
+  %conv = fptosi double %x to i128
+  %spec.store.select = call i128 @llvm.smin.i128(i128 %conv, i128 18446744073709551616)
+  %spec.store.select7 = call i128 @llvm.smax.i128(i128 %spec.store.select, i128 0)
+  %conv6 = trunc i128 %spec.store.select7 to i64
+  ret i64 %conv6
+}
+
 define i64 @stest_f32i64(float %x) {
 ; CHECK-LABEL: stest_f32i64:
 ; CHECK:         .functype stest_f32i64 (f32) -> (i64)
@@ -679,6 +783,21 @@ entry:
   ret i64 %conv6
 }
 
+define i64 @stest_f32i64_cse_combine(float %x) #0 {
+; CHECK-LABEL: stest_f32i64_cse_combine:
+; CHECK:         .functype stest_f32i64_cse_combine (f32) -> (i64)
+; CHECK-NEXT:  # %bb.0: # %entry
+; CHECK-NEXT:    local.get 0
+; CHECK-NEXT:    i64.trunc_sat_f32_s
+; CHECK-NEXT:    # fallthrough-return
+entry:
+  %conv = fptosi float %x to i128
+  %spec.store.select = call i128 @llvm.smin.i128(i128 %conv, i128 9223372036854775807)
+  %spec.store.select7 = call i128 @llvm.smax.i128(i128 %spec.store.select, i128 -9223372036854775808)
+  %conv6 = trunc i128 %spec.store.select7 to i64
+  ret i64 %conv6
+}
+
 define i64 @ustest_f32i64(float %x) {
 ; CHECK-LABEL: ustest_f32i64:
 ; CHECK:         .functype ustest_f32i64 (f32) -> (i64)
@@ -738,6 +857,66 @@ entry:
   ret i64 %conv6
 }
 
+define i64 @ustest_f32i64_cse_combine(float %x) #0 {
+; CHECK-LABEL: ustest_f32i64_cse_combine:
+; CHECK:         .functype ustest_f32i64_cse_combine (f32) -> (i64)
+; CHECK-NEXT:    .local i32, i64, i64
+; CHECK-NEXT:  # %bb.0: # %entry
+; CHECK-NEXT:    global.get __stack_pointer
+; CHECK-NEXT:    i32.const 16
+; CHECK-NEXT:    i32.sub
+; CHECK-NEXT:    local.tee 1
+; CHECK-NEXT:    global.set __stack_pointer
+; CHECK-NEXT:    local.get 1
+; CHECK-NEXT:    local.get 0
+; CHECK-NEXT:    call __fixsfti
+; CHECK-NEXT:    local.get 1
+; CHECK-NEXT:    i32.const 8
+; CHECK-NEXT:    i32.add
+; CHECK-NEXT:    i64.load 0
+; CHECK-NEXT:    local.set 2
+; CHECK-NEXT:    local.get 1
+; CHECK-NEXT:    i64.load 0
+; CHECK-NEXT:    local.set 3
+; CHECK-NEXT:    local.get 1
+; CHECK-NEXT:    i32.const 16
+; CHECK-NEXT:    i32.add
+; CHECK-NEXT:    global.set __stack_pointer
+; CHECK-NEXT:    i64.const 0
+; CHECK-NEXT:    local.get 3
+; CHECK-NEXT:    i64.const 0
+; CHECK-NEXT:    local.get 2
+; CHECK-NEXT:    i64.const 1
+; CHECK-NEXT:    i64.lt_s
+; CHECK-NEXT:    local.tee 1
+; CHECK-NEXT:    i64.select
+; CHECK-NEXT:    local.get 2
+; CHECK-NEXT:    i64.const 1
+; CHECK-NEXT:    i64.eq
+; CHECK-NEXT:    i64.select
+; CHECK-NEXT:    local.tee 3
+; CHECK-NEXT:    local.get 3
+; CHECK-NEXT:    i64.const 0
+; CHECK-NEXT:    local.get 2
+; CHECK-NEXT:    i64.const 1
+; CHECK-NEXT:    local.get 1
+; CHECK-NEXT:    i64.select
+; CHECK-NEXT:    local.tee 2
+; CHECK-NEXT:    i64.const 0
+; CHECK-NEXT:    i64.gt_s
+; CHECK-NEXT:    i64.select
+; CHECK-NEXT:    local.get 2
+; CHECK-NEXT:    i64.eqz
+; CHECK-NEXT:    i64.select
+; CHECK-NEXT:    # fallthrough-return
+entry:
+  %conv = fptosi float %x to i128
+  %spec.store.select = call i128 @llvm.smin.i128(i128 %conv, i128 18446744073709551616)
+  %spec.store.select7 = call i128 @llvm.smax.i128(i128 %spec.store.select, i128 0)
+  %conv6 = trunc i128 %spec.store.select7 to i64
+  ret i64 %conv6
+}
+
 define i64 @stest_f16i64(half %x) {
 ; CHECK-LABEL: stest_f16i64:
 ; CHECK:         .functype stest_f16i64 (f32) -> (i64)


        


More information about the llvm-commits mailing list