brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · 5bdc60b Raw
142 lines · plain
1; RUN: llc < %s -mcpu=generic -mtriple=i686-- -mattr=+cmov,cx16 -verify-machineinstrs | FileCheck %s2 3target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"4 5define void @func(i32 %argc, ptr %argv) nounwind {6entry:7	%argc.addr = alloca i32		; <ptr> [#uses=1]8	%argv.addr = alloca ptr		; <ptr> [#uses=1]9	%val1 = alloca i32		; <ptr> [#uses=2]10	%val2 = alloca i32		; <ptr> [#uses=15]11	%andt = alloca i32		; <ptr> [#uses=2]12	%ort = alloca i32		; <ptr> [#uses=2]13	%xort = alloca i32		; <ptr> [#uses=2]14	%old = alloca i32		; <ptr> [#uses=18]15	%temp = alloca i32		; <ptr> [#uses=2]16	%temp64 = alloca i6417	store i32 %argc, ptr %argc.addr18	store ptr %argv, ptr %argv.addr19	store i32 0, ptr %val120	store i32 31, ptr %val221	store i32 3855, ptr %andt22	store i32 3855, ptr %ort23	store i32 3855, ptr %xort24	store i32 4, ptr %temp25	%tmp = load i32, ptr %temp26        ; CHECK: lock27        ; CHECK: xaddl28  %0 = atomicrmw add ptr %val1, i32 %tmp monotonic29	store i32 %0, ptr %old30        ; CHECK: lock31        ; CHECK: xaddl32  %1 = atomicrmw sub ptr %val2, i32 30 monotonic33	store i32 %1, ptr %old34        ; CHECK: lock35        ; CHECK: xaddl36  %2 = atomicrmw add ptr %val2, i32 1 monotonic37	store i32 %2, ptr %old38        ; CHECK: lock39        ; CHECK: xaddl40  %3 = atomicrmw sub ptr %val2, i32 1 monotonic41	store i32 %3, ptr %old42        ; CHECK: andl43        ; CHECK: lock44        ; CHECK: cmpxchgl45  %4 = atomicrmw and ptr %andt, i32 4080 monotonic46	store i32 %4, ptr %old47        ; CHECK: orl48        ; CHECK: lock49        ; CHECK: cmpxchgl50  %5 = atomicrmw or ptr %ort, i32 4080 monotonic51	store i32 %5, ptr %old52        ; CHECK: xorl53        ; CHECK: lock54        ; CHECK: cmpxchgl55  %6 = atomicrmw xor ptr %xort, i32 4080 monotonic56	store i32 %6, ptr %old57        ; CHECK: cmov58        ; CHECK: lock59        ; CHECK: cmpxchgl60  %7 = atomicrmw min ptr %val2, i32 16 monotonic61	store i32 %7, ptr %old62	%neg = sub i32 0, 1		; <i32> [#uses=1]63        ; CHECK: cmov64        ; CHECK: lock65        ; CHECK: cmpxchgl66  %8 = atomicrmw min ptr %val2, i32 %neg monotonic67	store i32 %8, ptr %old68        ; CHECK: cmov69        ; CHECK: lock70        ; CHECK: cmpxchgl71  %9 = atomicrmw max ptr %val2, i32 1 monotonic72	store i32 %9, ptr %old73        ; CHECK: cmov74        ; CHECK: lock75        ; CHECK: cmpxchgl76  %10 = atomicrmw max ptr %val2, i32 0 monotonic77	store i32 %10, ptr %old78        ; CHECK: cmov79        ; CHECK: lock80        ; CHECK: cmpxchgl81  %11 = atomicrmw umax ptr %val2, i32 65535 monotonic82	store i32 %11, ptr %old83        ; CHECK: cmov84        ; CHECK: lock85        ; CHECK: cmpxchgl86  %12 = atomicrmw umax ptr %val2, i32 10 monotonic87	store i32 %12, ptr %old88        ; CHECK: cmov89        ; CHECK: lock90        ; CHECK: cmpxchgl91  %13 = atomicrmw umin ptr %val2, i32 1 monotonic92	store i32 %13, ptr %old93        ; CHECK: cmov94        ; CHECK: lock95        ; CHECK: cmpxchgl96  %14 = atomicrmw umin ptr %val2, i32 10 monotonic97	store i32 %14, ptr %old98        ; CHECK: xchgl   %{{.*}}, {{.*}}(%esp)99  %15 = atomicrmw xchg ptr %val2, i32 1976 monotonic100	store i32 %15, ptr %old101	%neg1 = sub i32 0, 10		; <i32> [#uses=1]102        ; CHECK: lock103        ; CHECK: cmpxchgl104  %pair16 = cmpxchg ptr %val2, i32 %neg1, i32 1 monotonic monotonic105  %16 = extractvalue { i32, i1 } %pair16, 0106	store i32 %16, ptr %old107        ; CHECK: lock108        ; CHECK: cmpxchgl109  %pair17 = cmpxchg ptr %val2, i32 1976, i32 1 monotonic monotonic110  %17 = extractvalue { i32, i1 } %pair17, 0111	store i32 %17, ptr %old112        ; CHECK: movl  [[R17atomic:.*]], %eax113        ; CHECK: movl %eax, %[[R17mask:[a-z]*]]114        ; CHECK: notl %[[R17mask]]115        ; CHECK: orl $-1402, %[[R17mask]]116        ; CHECK: lock117        ; CHECK: cmpxchgl	%[[R17mask]], [[R17atomic]]118        ; CHECK: jne119        ; CHECK: movl	%eax,120  %18 = atomicrmw nand ptr %val2, i32 1401 monotonic121  store i32 %18, ptr %old122        ; CHECK: notl123        ; CHECK: notl124        ; CHECK: orl $252645135125        ; CHECK: orl $252645135126        ; CHECK: lock127        ; CHECK: cmpxchg8b128  %19 = atomicrmw nand ptr %temp64, i64 17361641481138401520 monotonic129  store i64 %19, ptr %temp64130	ret void131}132 133define void @test2(ptr addrspace(256) nocapture %P) nounwind {134entry:135; CHECK: lock136; CHECK:	cmpxchgl	%{{.*}}, %gs:(%{{.*}})137 138  %pair0 = cmpxchg ptr addrspace(256) %P, i32 0, i32 1 monotonic monotonic139  %0 = extractvalue { i32, i1 } %pair0, 0140  ret void141}142