[K/N] Adjust filecheck tests for atomic intrinsics to -opt mode
^KT-60514 Fixed Merge-request: KT-MR-12179 Merged-by: Vladimir Sukharev <Vladimir.Sukharev@jetbrains.com>
This commit is contained in:
committed by
Space Team
parent
c637a228eb
commit
f5bd7cee05
@@ -36,6 +36,8 @@ import kotlin.concurrent.*
|
||||
@Volatile var booleanGlobal: Boolean = true
|
||||
|
||||
// Byte
|
||||
fun byteGlobal_getField() = byteGlobal
|
||||
fun byteGlobal_setField() { byteGlobal = 0 }
|
||||
|
||||
// CHECK-LABEL: define {{signext i8|i8}} @"kfun:#byteGlobal_getAndSetField(){}kotlin.Byte"()
|
||||
// CHECK: atomicrmw xchg i8* @"kvar:byteGlobal#internal", i8 0 seq_cst
|
||||
@@ -60,6 +62,8 @@ fun byteGlobal_compareAndSetField() = ::byteGlobal.compareAndSetField(0.toByte()
|
||||
fun byteGlobal_compareAndExchangeField() = ::byteGlobal.compareAndExchangeField(0.toByte(), 1.toByte())
|
||||
|
||||
// Short
|
||||
fun shortGlobal_getField() = shortGlobal
|
||||
fun shortGlobal_setField() { shortGlobal = 0 }
|
||||
|
||||
// CHECK-LABEL: define {{signext i16|i16}} @"kfun:#shortGlobal_getAndSetField(){}
|
||||
// CHECK: atomicrmw xchg i16* @"kvar:shortGlobal#internal", i16 0 seq_cst
|
||||
@@ -84,6 +88,8 @@ fun shortGlobal_compareAndSetField() = ::shortGlobal.compareAndSetField(0.toShor
|
||||
fun shortGlobal_compareAndExchangeField() = ::shortGlobal.compareAndExchangeField(0.toShort(), 1.toShort())
|
||||
|
||||
// Int
|
||||
fun intGlobal_getField() = intGlobal
|
||||
fun intGlobal_setField() { intGlobal = 0 }
|
||||
|
||||
// CHECK-LABEL: define i32 @"kfun:#intGlobal_getAndSetField(){}
|
||||
// CHECK: atomicrmw xchg i32* @"kvar:intGlobal#internal", i32 0 seq_cst
|
||||
@@ -108,6 +114,8 @@ fun intGlobal_compareAndSetField() = ::intGlobal.compareAndSetField(0, 1)
|
||||
fun intGlobal_compareAndExchangeField() = ::intGlobal.compareAndExchangeField(0, 1)
|
||||
|
||||
// Long
|
||||
fun longGlobal_getField() = longGlobal
|
||||
fun longGlobal_setField() { longGlobal = 0 }
|
||||
|
||||
// CHECK-LABEL: define i64 @"kfun:#longGlobal_getAndSetField(){}
|
||||
// CHECK: atomicrmw xchg i64* @"kvar:longGlobal#internal", i64 0 seq_cst
|
||||
@@ -132,6 +140,8 @@ fun longGlobal_compareAndSetField() = ::longGlobal.compareAndSetField(0L, 1L)
|
||||
fun longGlobal_compareAndExchangeField() = ::longGlobal.compareAndExchangeField(0L, 1L)
|
||||
|
||||
// Boolean
|
||||
fun booleanGlobal_getField() = booleanGlobal
|
||||
fun booleanGlobal_setField() { booleanGlobal = false }
|
||||
|
||||
// CHECK-LABEL: define {{zeroext i1|i1}} @"kfun:#booleanGlobal_getAndSetField(){}kotlin.Boolean"
|
||||
// CHECK: atomicrmw xchg i8* @"kvar:booleanGlobal#internal", i8 %{{[0-9]+}} seq_cst
|
||||
@@ -154,35 +164,30 @@ fun booleanGlobal_compareAndExchangeField() = ::booleanGlobal.compareAndExchange
|
||||
val intArr = IntArray(2)
|
||||
|
||||
// CHECK-LABEL: define i32 @"kfun:#intArr_atomicGet(){}kotlin.Int"()
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-intArr>(){}kotlin.IntArray"
|
||||
// CHECK: call i32* @Kotlin_intArrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: load atomic i32, i32* %{{[0-9]+}} seq_cst
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
fun intArr_atomicGet() = intArr.atomicGet(0)
|
||||
|
||||
// CHECK-LABEL: define void @"kfun:#intArr_atomicSet(){}"()
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-intArr>(){}kotlin.IntArray"
|
||||
// CHECK: call i32* @Kotlin_intArrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: store atomic i32 1, i32* %{{[0-9]+}} seq_cst
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
fun intArr_atomicSet() = intArr.atomicSet(0, 1)
|
||||
|
||||
// CHECK-LABEL: define i32 @"kfun:#intArr_getAndSet(){}kotlin.Int"()
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-intArr>(){}kotlin.IntArray"
|
||||
// CHECK: call i32* @Kotlin_intArrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: atomicrmw xchg i32* %{{[0-9]+}}, i32 1 seq_cst
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
fun intArr_getAndSet() = intArr.getAndSet(0, 1)
|
||||
|
||||
// CHECK-LABEL: define i32 @"kfun:#intArr_getAndAdd(){}kotlin.Int"()
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-intArr>(){}kotlin.IntArray"
|
||||
// CHECK: call i32* @Kotlin_intArrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: atomicrmw add i32* %{{[0-9]+}}, i32 1 seq_cst
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
fun intArr_getAndAdd() = intArr.getAndAdd(0, 1)
|
||||
|
||||
// CHECK-LABEL: define i32 @"kfun:#intArr_compareAndExchange(){}kotlin.Int"()
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-intArr>(){}kotlin.IntArray"
|
||||
// CHECK: call i32* @Kotlin_intArrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: cmpxchg i32* %{{[0-9]+}}, i32 1, i32 2 seq_cst seq_cst
|
||||
// CHECK: extractvalue { i32, i1 } %{{[0-9]+}}, 0
|
||||
@@ -190,7 +195,6 @@ fun intArr_getAndAdd() = intArr.getAndAdd(0, 1)
|
||||
fun intArr_compareAndExchange() = intArr.compareAndExchange(0, 1, 2)
|
||||
|
||||
// CHECK-LABEL: define {{zeroext i1|i1}} @"kfun:#intArr_compareAndSet(){}kotlin.Boolean"()
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-intArr>(){}kotlin.IntArray"
|
||||
// CHECK: call i32* @Kotlin_intArrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: cmpxchg i32* %{{[0-9]+}}, i32 1, i32 2 seq_cst seq_cst
|
||||
// CHECK: extractvalue { i32, i1 } %{{[0-9]+}}, 1
|
||||
@@ -201,35 +205,30 @@ fun intArr_compareAndSet() = intArr.compareAndSet(0, 1, 2)
|
||||
val longArr = LongArray(2)
|
||||
|
||||
// CHECK-LABEL: define i64 @"kfun:#longArr_atomicGet(){}kotlin.Long"()
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-longArr>(){}kotlin.LongArray"
|
||||
// CHECK: call i64* @Kotlin_longArrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: load atomic i64, i64* %{{[0-9]+}} seq_cst
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
fun longArr_atomicGet() = longArr.atomicGet(0)
|
||||
|
||||
// CHECK-LABEL: define void @"kfun:#longArr_atomicSet(){}"()
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-longArr>(){}kotlin.LongArray"
|
||||
// CHECK: call i64* @Kotlin_longArrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: store atomic i64 1, i64* %{{[0-9]+}} seq_cst
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
fun longArr_atomicSet() = longArr.atomicSet(0, 1L)
|
||||
|
||||
// CHECK-LABEL: define i64 @"kfun:#longArr_getAndSet(){}kotlin.Long"()
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-longArr>(){}kotlin.LongArray"
|
||||
// CHECK: call i64* @Kotlin_longArrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: atomicrmw xchg i64* %{{[0-9]+}}, i64 1 seq_cst
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
fun longArr_getAndSet() = longArr.getAndSet(0, 1L)
|
||||
|
||||
// CHECK-LABEL: define i64 @"kfun:#longArr_getAndAdd(){}kotlin.Long"()
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-longArr>(){}kotlin.LongArray"
|
||||
// CHECK: call i64* @Kotlin_longArrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: atomicrmw add i64* %{{[0-9]+}}, i64 1 seq_cst
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
fun longArr_getAndAdd() = longArr.getAndAdd(0, 1L)
|
||||
|
||||
// CHECK-LABEL: define i64 @"kfun:#longArr_compareAndExchange(){}kotlin.Long"()
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-longArr>(){}kotlin.LongArray"
|
||||
// CHECK: call i64* @Kotlin_longArrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: cmpxchg i64* %{{[0-9]+}}, i64 1, i64 2 seq_cst seq_cst
|
||||
// CHECK: extractvalue { i64, i1 } %{{[0-9]+}}, 0
|
||||
@@ -237,7 +236,6 @@ fun longArr_getAndAdd() = longArr.getAndAdd(0, 1L)
|
||||
fun longArr_compareAndExchange() = longArr.compareAndExchange(0, 1L, 2L)
|
||||
|
||||
// CHECK-LABEL: define {{zeroext i1|i1}} @"kfun:#longArr_compareAndSet(){}kotlin.Boolean"()
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-longArr>(){}kotlin.LongArray"
|
||||
// CHECK: call i64* @Kotlin_longArrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: cmpxchg i64* %{{[0-9]+}}, i64 1, i64 2 seq_cst seq_cst
|
||||
// CHECK: extractvalue { i64, i1 } %{{[0-9]+}}, 1
|
||||
@@ -248,38 +246,87 @@ fun longArr_compareAndSet() = longArr.compareAndSet(0, 1L, 2L)
|
||||
val refArr = arrayOfNulls<String?>(2)
|
||||
|
||||
// CHECK-LABEL: define %struct.ObjHeader* @"kfun:#refArr_atomicGet(){}kotlin.String?"
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-refArr>(){}kotlin.Array<kotlin.String?>"
|
||||
// CHECK: call %struct.ObjHeader** @Kotlin_arrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: load atomic %struct.ObjHeader*, %struct.ObjHeader** %{{[0-9]+}} seq_cst
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
fun refArr_atomicGet() = refArr.atomicGet(0)
|
||||
|
||||
// CHECK-LABEL: define void @"kfun:#refArr_atomicSet(){}"()
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-refArr>(){}kotlin.Array<kotlin.String?>"
|
||||
// CHECK: call %struct.ObjHeader** @Kotlin_arrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: call void @UpdateVolatileHeapRef(%struct.ObjHeader** %{{[0-9]+}}, %struct.ObjHeader* null)
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
fun refArr_atomicSet() = refArr.atomicSet(0, null)
|
||||
|
||||
// CHECK-LABEL: define %struct.ObjHeader* @"kfun:#refArr_getAndSet(){}kotlin.String?"
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-refArr>(){}kotlin.Array<kotlin.String?>"
|
||||
// CHECK: call %struct.ObjHeader** @Kotlin_arrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: call %struct.ObjHeader* @GetAndSetVolatileHeapRef(%struct.ObjHeader** %{{[0-9]+}}, %struct.ObjHeader* null, %struct.ObjHeader** %{{[0-9]+}})
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
fun refArr_getAndSet() = refArr.getAndSet(0, null)
|
||||
|
||||
// CHECK-LABEL: define %struct.ObjHeader* @"kfun:#refArr_compareAndExchange(){}kotlin.String?"
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-refArr>(){}kotlin.Array<kotlin.String?>"
|
||||
// CHECK: call %struct.ObjHeader** @Kotlin_arrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: call %struct.ObjHeader* @CompareAndSwapVolatileHeapRef(%struct.ObjHeader** %{{[0-9]+}}, %struct.ObjHeader* null, %struct.ObjHeader* null, %struct.ObjHeader** %{{[0-9]+}})
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
fun refArr_compareAndExchange() = refArr.compareAndExchange(0, null, null)
|
||||
|
||||
// CHECK-LABEL: define {{zeroext i1|i1}} @"kfun:#refArr_compareAndSet(){}kotlin.Boolean"()
|
||||
// CHECK: call %struct.ObjHeader* @"kfun:#<get-refArr>(){}kotlin.Array<kotlin.String?>"
|
||||
// CHECK: call %struct.ObjHeader** @Kotlin_arrayGetElementAddress(%struct.ObjHeader* %{{[0-9]+}}, i32 0)
|
||||
// CHECK: call {{zeroext i1|i1}} @CompareAndSetVolatileHeapRef(%struct.ObjHeader** %{{[0-9]+}}, %struct.ObjHeader* null, %struct.ObjHeader* null)
|
||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
fun refArr_compareAndSet() = refArr.compareAndSet(0, null, null)
|
||||
|
||||
fun main() {}
|
||||
fun main() {
|
||||
byteGlobal_getField()
|
||||
byteGlobal_setField()
|
||||
byteGlobal_getAndSetField()
|
||||
byteGlobal_getAndAddField()
|
||||
byteGlobal_compareAndSetField()
|
||||
byteGlobal_compareAndExchangeField()
|
||||
|
||||
shortGlobal_getField()
|
||||
shortGlobal_setField()
|
||||
shortGlobal_getAndSetField()
|
||||
shortGlobal_getAndAddField()
|
||||
shortGlobal_compareAndSetField()
|
||||
shortGlobal_compareAndExchangeField()
|
||||
|
||||
intGlobal_getField()
|
||||
intGlobal_setField()
|
||||
intGlobal_getAndSetField()
|
||||
intGlobal_getAndAddField()
|
||||
intGlobal_compareAndSetField()
|
||||
intGlobal_compareAndExchangeField()
|
||||
|
||||
longGlobal_getField()
|
||||
longGlobal_setField()
|
||||
longGlobal_getAndSetField()
|
||||
longGlobal_getAndAddField()
|
||||
longGlobal_compareAndSetField()
|
||||
longGlobal_compareAndExchangeField()
|
||||
|
||||
booleanGlobal_getField()
|
||||
booleanGlobal_setField()
|
||||
booleanGlobal_getAndSetField()
|
||||
booleanGlobal_compareAndSetField()
|
||||
booleanGlobal_compareAndExchangeField()
|
||||
|
||||
intArr_atomicGet()
|
||||
intArr_atomicSet()
|
||||
intArr_getAndSet()
|
||||
intArr_getAndAdd()
|
||||
intArr_compareAndSet()
|
||||
intArr_compareAndExchange()
|
||||
|
||||
longArr_atomicGet()
|
||||
longArr_atomicSet()
|
||||
longArr_getAndSet()
|
||||
longArr_getAndAdd()
|
||||
longArr_compareAndSet()
|
||||
longArr_compareAndExchange()
|
||||
|
||||
refArr_atomicGet()
|
||||
refArr_atomicSet()
|
||||
refArr_getAndSet()
|
||||
refArr_compareAndSet()
|
||||
refArr_compareAndExchange()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user