@@ -13806,6 +13806,64 @@ double dxevd() {
13806
13806
return dv;
13807
13807
}
13808
13808
13809
+
13810
+ double fail_dxevd() {
13811
+ double dx, dv, de, dd;
13812
+
13813
+ #pragma omp atomic compare capture relaxed fail(relaxed)
13814
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13815
+
13816
+ #pragma omp atomic compare capture acquire fail(relaxed)
13817
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13818
+
13819
+ #pragma omp atomic compare capture release fail(relaxed)
13820
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13821
+
13822
+ #pragma omp atomic compare capture acq_rel fail(relaxed)
13823
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13824
+
13825
+ #pragma omp atomic compare capture seq_cst fail(relaxed)
13826
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13827
+
13828
+ #pragma omp atomic compare capture relaxed fail(acquire)
13829
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13830
+
13831
+ #pragma omp atomic compare capture acquire fail(acquire)
13832
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13833
+
13834
+ #pragma omp atomic compare capture release fail(acquire)
13835
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13836
+
13837
+ #pragma omp atomic compare capture acq_rel fail(acquire)
13838
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13839
+
13840
+ #pragma omp atomic compare capture seq_cst fail(acquire)
13841
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13842
+
13843
+ #pragma omp atomic compare capture relaxed fail(seq_cst)
13844
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13845
+
13846
+ #pragma omp atomic compare capture acquire fail(seq_cst)
13847
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13848
+
13849
+ #pragma omp atomic compare capture release fail(seq_cst)
13850
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13851
+
13852
+ #pragma omp atomic compare capture acq_rel fail(seq_cst)
13853
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13854
+
13855
+ #pragma omp atomic compare capture seq_cst fail(seq_cst)
13856
+ {if(dx == de) { dx = dv; } else { dd = dx; }}
13857
+
13858
+ #pragma omp atomic compare seq_cst fail(acquire)
13859
+ dx = dx < de ? de : dx;
13860
+
13861
+ #pragma omp atomic compare relaxed fail(seq_cst)
13862
+ dx = dx > de ? de : dx;
13863
+
13864
+ return dx;
13865
+ }
13866
+
13809
13867
#endif
13810
13868
// CHECK-LABEL: @foo(
13811
13869
// CHECK-NEXT: entry:
@@ -61966,3 +62024,89 @@ double dxevd() {
61966
62024
// SIMD-ONLY0-NEXT: [[TMP180:%.*]] = load double, ptr [[DV]], align 8
61967
62025
// SIMD-ONLY0-NEXT: ret double [[TMP180]]
61968
62026
//
62027
+ // CHECK-LABEL: {{.+}}fail_dxevd{{.+}}
62028
+ // CHECK-NEXT: entry:
62029
+ // CHECK: {{.+}} load double,{{.+}}
62030
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62031
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62032
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62033
+ // CHECK-NEXT: {{.+}}cmpxchg ptr {{.+}} monotonic monotonic{{.+}}
62034
+ // CHECK: {{.+}} load double,{{.+}}
62035
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62036
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62037
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62038
+ // CHECK: {{.+}}cmpxchg ptr {{.+}} acquire monotonic{{.+}}
62039
+ // CHECK: {{.+}} load double,{{.+}}
62040
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62041
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62042
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62043
+ // CHECK: {{.+}}cmpxchg ptr {{.+}} release monotonic{{.+}}
62044
+ // CHECK: {{.+}} load double,{{.+}}
62045
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62046
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62047
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62048
+ // CHECK: {{.+}}cmpxchg ptr {{.+}} acq_rel monotonic{{.+}}
62049
+ // CHECK: {{.+}} load double,{{.+}}
62050
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62051
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62052
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62053
+ // CHECK-NEXT: {{.+}}cmpxchg ptr {{.+}} seq_cst monotonic{{.+}}
62054
+ // CHECK: {{.+}}__kmpc_flush{{.+}}
62055
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62056
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62057
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62058
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62059
+ // CHECK: {{.+}}cmpxchg ptr {{.+}} monotonic acquire{{.+}}
62060
+ // CHECK: {{.+}} load double,{{.+}}
62061
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62062
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62063
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62064
+ // CHECK: {{.+}}cmpxchg ptr {{.+}} acquire acquire{{.+}}
62065
+ // CHECK: {{.+}} load double,{{.+}}
62066
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62067
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62068
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62069
+ // CHECK: {{.+}}cmpxchg ptr {{.+}} release acquire{{.+}}
62070
+ // CHECK: {{.+}} load double,{{.+}}
62071
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62072
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62073
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62074
+ // CHECK: {{.+}}cmpxchg ptr {{.+}} acq_rel acquire{{.+}}
62075
+ // CHECK: {{.+}} load double,{{.+}}
62076
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62077
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62078
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62079
+ // CHECK: {{.+}}cmpxchg ptr {{.+}} seq_cst acquire{{.+}}
62080
+ // CHECK: {{.+}}__kmpc_flush{{.+}}
62081
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62082
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62083
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62084
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62085
+ // CHECK: {{.+}}cmpxchg ptr {{.+}} monotonic seq_cst{{.+}}
62086
+ // CHECK: {{.+}} load double,{{.+}}
62087
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62088
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62089
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62090
+ // CHECK: {{.+}}cmpxchg ptr {{.+}} acquire seq_cst{{.+}}
62091
+ // CHECK: {{.+}} load double,{{.+}}
62092
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62093
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62094
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62095
+ // CHECK: {{.+}}cmpxchg ptr {{.+}} release seq_cst{{.+}}
62096
+ // CHECK: {{.+}} load double,{{.+}}
62097
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62098
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62099
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62100
+ // CHECK: {{.+}}cmpxchg ptr {{.+}} acq_rel seq_cst{{.+}}
62101
+ // CHECK: {{.+}} load double,{{.+}}
62102
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62103
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62104
+ // CHECK-NEXT: {{.+}} bitcast double{{.+}}
62105
+ // CHECK: {{.+}}cmpxchg ptr {{.+}} seq_cst seq_cst{{.+}}
62106
+ // CHECK: call void {{.+}}__kmpc_flush{{.+}}
62107
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62108
+ // CHECK-NEXT: {{.+}} atomicrmw fmax {{.+}} seq_cst{{.+}}
62109
+ // CHECK-NEXT: call void {{.+}}__kmpc_flush{{.+}}
62110
+ // CHECK-NEXT: {{.+}} load double,{{.+}}
62111
+ // CHECK-NEXT: {{.+}} atomicrmw fmin {{.+}} monotonic{{.+}}
62112
+ // CHECK: ret double {{.+}}
0 commit comments